UVA - 624 (01背包,记录路径)
2017-08-06 16:17
239 查看
简单的01背包,可以用笨方法记下路径
代码如下:
当然也可以用一个二维数组记录最后再输出
代码如下:
#include<iostream> #include<algorithm> #include<string> #include<cstring> #include<map> #include<queue> #include<cmath> #include<stack> #include<vector> #include<cstdio> #define MAXN 33000 #define INF 0x3f3f3f3f #define lmid l,m,rt<<1 #define rmid m+1,r,rt<<1|1 #define ls rt<<1 #define rs rt<<1|1 #define Mod 1000000007 #define i64 __int64 using namespace std; int num[35]; struct node { int s[30]; int pos; int ans; }dp[10005]; int main() { int n,m; while(scanf("%d",&m)==1) { scanf("%d",&n); memset(dp,0,sizeof(dp)); for(int i=0;i<n;i++) { scanf("%d",&num[i]); } for(int i=0;i<n;i++) for(int j=m;j>=num[i];j--) { if(dp[j].ans<=dp[j-num[i]].ans+num[i]) { int l=dp[j-num[i]].pos; for(int k=0;k<l;k++) { dp[j].s[k]=dp[j-num[i]].s[k]; } dp[j].s[l]=num[i];dp[j].pos=++l; dp[j].ans=dp[j-num[i]].ans+num[i]; } } int l=dp[m].pos; for(int i=0;i<l;i++) { cout<<dp[m].s[i]<<" "; } cout<<"sum:"<<dp[m].ans<<endl; } return 0; }
当然也可以用一个二维数组记录最后再输出
#include<iostream> #include<algorithm> #include<string> #include<cstring> #include<map> #include<queue> #include<cmath> #include<stack> #include<vector> #include<cstdio> #define MAXN 33000 #define INF 0x3f3f3f3f #define lmid l,m,rt<<1 #define rmid m+1,r,rt<<1|1 #define ls rt<<1 #define rs rt<<1|1 #define Mod 1000000007 #define i64 __int64 using namespace std; int num[35]; int dp[10005],a[35][10005]; int main() { int n,m; while(scanf("%d",&m)==1) { scanf("%d",&n); memset(dp,0,sizeof(dp)); memset(a,0,sizeof(a)); for(int i=0;i<n;i++) { scanf("%d",&num[i]); } for(int i=0;i<n;i++) for(int j=m;j>=num[i];j--) { if(dp[j]<=dp[j-num[i]]+num[i]) { dp[j]=dp[j-num[i]]+num[i]; a[i][j]=1; } } for(int i=n-1,j=m;i>=0;i--) { if(a[i][j]) { printf("%d ",num[i]); j-=num[i]; } } printf("sum:%d\n",dp[m]); } return 0; }
相关文章推荐
- UVA 624 CD(01背包+记录路径)
- UVA 624 CD (01背包+打印路径 或 dfs+记录路径)
- UVA 624 CD(01背包/记录路径)
- Uva624(记录路径的01背包)
- CD - UVa 624 01背包记录路径
- UVA - 624 CD(01背包+路径纪录)
- UVA 624 CD(打印路径的01背包)
- UVA 624 记录路径的0-1背包
- UVA 624 CD(01背包,要记录路径)
- uva624(01背包+打印路径)
- UVA 624 CD (01背包+打印路径)
- UVa - 624 - CD(0-1 + 记录路径)
- 【DP】UVA 624 CD 记录路径
- 01背包(打印路径) 之 uva 624
- 【DP】UVA 624 CD 记录路径
- 【DP】UVA 624 CD 记录路径
- 【uva】624 CD【背包记录路径】
- UVA624 CD,01背包+打印路径,好题!
- 01背包(打印路径) 之 uva 624
- UVA 624 CD(01背包+dp打印路径)