UVA 624 CD (01背包)
Posted 邻家那小孩儿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVA 624 CD (01背包)相关的知识,希望对你有一定的参考价值。
//路径记录方法:若是dp[j-value[i]]+value[i]>dp[j]说明拿了这个东西,标志为1,
//for循环标志,发现是1,就打印出来,并把背包的容量减少,再在次容量中寻找标志;
#include <iostream> #include <cstring> #include <algorithm> using namespace std; int value[30],dp[10001],s[30][10001]; int main() { int n,m; while(cin>>m) { cin>>n; for(int i=1;i<=n;i++) cin>>value[i]; memset(dp,0,sizeof(dp)); memset(s,0,sizeof(s)); for(int i=1;i<=n;i++) for(int j=m;j>=value[i];j--) if(dp[j]<=dp[j-value[i]]+value[i]) { dp[j]=dp[j-value[i]]+value[i]; s[i][j]=1; } for(int i=n,j=m;i>=1;i--) { if(s[i][j]) { cout<<value[i]<<" "; j=j-value[i]; } } cout<<"sum:"<<dp[m]<<endl; } return 0; }
以上是关于UVA 624 CD (01背包)的主要内容,如果未能解决你的问题,请参考以下文章