1068. Find More Coins (30)

    xiaoxiao2021-03-26  19

    1068. Find More Coins (30) 考察动态规划

    #include <iostream> #include <vector> #include <algorithm> using namespace std; const int MAXN=10004,MAXM=104; int n,m; int v[MAXN],dp[MAXN][MAXM]; bool flag[MAXN][MAXM]; int main() { cin>>n>>m; for(int i=1;i<=n;++i) cin>>v[i]; sort(v+1,v+n+1,greater<int>()); for(int i=1;i<=n;++i) { for(int j=1;j<=m;++j) { if(j<v[i]||dp[i-1][j-v[i]]+v[i]<dp[i-1][j]) dp[i][j]=dp[i-1][j]; else { dp[i][j]=dp[i-1][j-v[i]]+v[i]; flag[i][j]=true; } } } if(dp[n][m]!=m) cout<<"No Solution"; else { vector<int> ans; while(m) { while(!flag[n][m])--n; ans.push_back(v[n]); m-=v[n--]; } for(auto it=ans.begin();it!=ans.end();++it) (it==ans.end()-1)?cout<<*it:cout<<*it<<" "; } return 0; }
    转载请注明原文地址: https://ju.6miu.com/read-658747.html

    最新回复(0)