#include <string.h>
#include <stdio.h>
#include <algorithm>
#include <vector>
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;i<N;i++)
{
scanf("%d",&A[i]);
}
sort(A,A+N,cmp);
for(int i=0;i<N;i++)
{
for(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;i<result.size();i++)
{
if(i!=0)printf(" ");
printf("%d",result[i]);
}
}
return 0;
}
PAT甲1068 Find More Coins(30 分)
最新推荐文章于 2022-04-24 15:52:31 发布