1 solutions

  • 0
    @ 2025-11-5 18:03:36

    C :

    #include <stdio.h>
    #include <string.h>
    
    int coins[1100000];
    unsigned dp[1100000];
    
    int comp(const int* a, const int *b) {
        return (*a)-(*b);
    }
    main() {
        int nc;
        int i,j;
        int CASES;
        int price;
        scanf("%d", &CASES);
        while(CASES--) {
            memset(dp,-1,sizeof(dp));
            dp[0]=0;
            scanf("%d", &price);
            scanf("%d", &nc);
            for(i=0;i<nc;i++) {
                scanf("%d", coins+i);
            }
            for(i=0;i<nc;i++) {
                for(j=price-1;j>=0;j--) {
                    if(dp[j]==-1) continue;
                    if(dp[j+coins[i]] > dp[j]+1) dp[j+coins[i]] = dp[j]+1;
                }
            }
            for(i=price;dp[i]==-1;i++);
            printf("%d %d\n", i, dp[i]);
        }
    }
    
    • 1

    Information

    ID
    18744
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    (None)
    # Submissions
    0
    Accepted
    0
    Uploaded By