AcWing 1554. 找更多硬币
原题链接
中等
作者:
罗敏
,
2020-08-28 10:51:40
,
所有人可见
,
阅读 551
C++ 代码
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#include<vector>
#include<map>
#include<queue>
#include<cstdio>
#include<cmath>
using namespace std;
const int N = 110;
int n,m,f[10010][N],a[10010];
int main(){
// freopen("1.txt","r",stdin);
cin>>n>>m;
f[0][0]=1;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+n+1);
reverse(a+1,a+n+1);
for(int i=1;i<=n;i++){
for(int j=0;j<=m;j++){
if(j<a[i]) f[i][j]=f[i-1][j];
else if(f[i-1][j]==1||f[i-1][j-a[i]]==1) f[i][j]=1;
}
}
if(f[n][m]==1){
int t=m;
for(int i=n;i>=1;i--){
if(t>=a[i]&&f[i-1][t-a[i]]==1){
cout<<a[i]<<" ";
t-=a[i];
}
}
}else cout<<"No Solution"<<endl;
return 0;
}