DP专题
Find More Coins (30)
Link
01背包问题
#include <iostream> #include <cstdio> #include <cstdlib> #include <algorithm> #include <string> #include <string.h> #include <vector> #include <cmath> using namespace std; int n,m; int w[10001]; int dp[101]; bool path[10001][101]; int main() { scanf("%d%d",&n,&m); for(int i=1;i<=n;++i) scanf("%d",&w[i]); sort(w+1,w+1+n,greater<int>()); for(int i=1;i<=n;++i) for(int j=m;j>=w[i];--j) if(dp[j-w[i]]+w[i]>=dp[j]){ path[i][j]=true; dp[j]=dp[j-w[i]]+w[i]; } if(dp[m]!=m) printf("No Solution\n"); else{ int i=n,j=m; while(1){ if(path[i][j]){ printf("%d",w[i]); j-=w[i]; if(j!=0) printf(" "); } i--; if(i==0||j==0) break; } } return 0; }
本文作者:Ryomk
本文链接:https://www.cnblogs.com/preccrep/p/16403887.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步