poj 1787 多重背包 记录路径
2013-04-14 20:41
330 查看
#include<cstdio> #include<iostream> #include<cstring> #define N 10100 using namespace std; int dp ; int used ; int path ; int num[30]; int main(){ int b[10]; int P,c1,c2,c3,c4; int a[10]; while(scanf("%d",&P)!=EOF,P){ for(int i=1;i<=4;i++) cin>>b[i]; memset(dp,-1,sizeof(dp)); dp[0]=0; a[1]=1; a[2]=5; a[3]=10; a[4]=25; for(int i=1;i<=4;i++){ memset(used,0,sizeof(used)); for(int j=a[i];j<=P;j++) if(dp[j-a[i]]+1>dp[j]&&dp[j-a[i]]!=-1&&used[j-a[i]]<b[i]) { dp[j]=dp[j-a[i]]+1; used[j]=used[j-a[i]]+1; path[j]=j-a[i]; } } if(dp[P]==-1) printf("Charlie cannot buy coffee.\n"); else{ memset(num,0,sizeof(num)); while(dp[P]){ num[P-path[P]]++; P=path[P]; } printf("Throw in %d cents, %d nickels, %d dimes, and %d quarters.\n", num[1], num[5], num[10], num[25]); } } return 0; } //路径是如何记录的 //题意求最多硬币数 //多重背包不用压缩。最常见题意,初始化。
相关文章推荐
- poj 1787 记录路径的多重背包
- POJ 1787 - Charlie's Change(完全背包+路径记录)
- poj 1787 多重背包+路径记录
- poj 1787 Charlie's Change(完全背包 或 多重背包 记录路径)
- POJ_1787_Charlie'sChange(多重背包&&记录路径)
- poj 1787 Charlie's Change(多重背包路径记录)
- POJ 1787(完全背包+记录路径)
- poj 1787 多重背包记录路径
- poj1787 Charlie's Change (多重背包+记录路径)
- poj 1787 Charlie's Change【多重背包可行性+记录路径】
- poj 1787 背包+记录路径
- POJ 1787 Charlie's Change(多重背包+记录路径)
- POJ - 1787 完全背包,记录路径
- poj 1787 多重背包记录路径
- POJ 1784 Charlie's Change 记录路径的多重背包
- POJ1787 【完全背包+物品计数+路径输出】
- POJ_1787_多重背包方案记录
- poj 1787 Charlie's Change(背包问题输出路径)
- POJ 1293 Duty Free Shop(背包记录路径)
- 动态规划,多重背包,保存路径,用完全背包的方法做多重背包(Charlie's Change,poj 1787)