PAT甲1068 Find More Coins(30 分)

#include 
#include 
#include 
#include 
using namespace std;

int N,M;
int dp[10010];
int A[10010];
bool choice[10010][110];

bool cmp(int a,int b)
{
    return a>b;
}

int main()
{
    scanf("%d%d",&N,&M);
    for(int i=0;iscanf("%d",&A[i]);
    }
    sort(A,A+N,cmp);
    for(int i=0;ifor(int v=M;v>=A[i];v--)
        {
            if(dp[v]<=dp[v-A[i]]+A[i])
            {
                dp[v]=dp[v-A[i]]+A[i];
                choice[i][v]=true;
            }
            else
            {
                choice[i][v]=false;
            }
        }
    }
    if(dp[M]!=M)printf("No Solution");
    else
    {
        int v=M,k=N;
        vector<int> result;
        while(k>=0)
        {
            if(choice[k][v]==true)
            {
                result.push_back(A[k]);
                v-=A[k];
            }
            k--;
        }
        for(int i=0;iif(i!=0)printf(" ");

            printf("%d",result[i]);
        }
    }
    return 0;
}


你可能感兴趣的:(PAT)