UVA624(01背包记录路径)
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=565
01背包打印路径。
#include <cstdio> #include <cstring> using namespace std; const int MAXN=10005; int n,W; int w[30]; int dp[MAXN]; int vis[30][MAXN]; int main() { while(scanf("%d%d",&W,&n)!=EOF) { memset(vis,0,sizeof(vis)); memset(dp,0,sizeof(dp)); for(int i=0;i<n;i++) { scanf("%d",&w[i]); } for(int i=0;i<n;i++) { for(int j=W;j>=w[i];j--) { if(dp[j-w[i]]+w[i]>dp[j]) { dp[j]=dp[j-w[i]]+w[i]; vis[i][j]=1; } } } for(int i=n-1,j=W;i>=0;i--) { if(vis[i][j]) { printf("%d ",w[i]); j-=w[i]; } } printf("sum:%d\n",dp[W]); } return 0; }
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步