POJ 1787 Charlie's Change
2014-07-14 09:56
393 查看
多重背包 可行性+路径记录
题意是说你要用更多的零钱去买咖啡。最后输出你分别要用的 1,5 ,10 ,25 的钱的数量。
多重背包二进制分解,然后记录下 这个状态。最后逆向推即可。
题意是说你要用更多的零钱去买咖啡。最后输出你分别要用的 1,5 ,10 ,25 的钱的数量。
多重背包二进制分解,然后记录下 这个状态。最后逆向推即可。
#include<cstdio> #include<cstring> #include<string> #include<queue> #include<algorithm> #include<map> #include<stack> #include<iostream> #include<list> #include<set> #include<cmath> #define INF 0x7fffffff #define eps 1e-6 #define LL long long using namespace std; int dp[10001]; int cot[4]; int value[]={1,5,10,25}; int n; struct lx { int va,co; }v[10001]; int zero(int cost,int i,int co) { cost*=co; for(int j=n;j>=cost;j--) if(dp[j-cost]+co>dp[j]) { dp[j]=dp[j-cost]+co; v[j].va=i; v[j].co=co; } } int main() { while(scanf("%d",&n)) { for(int i=0;i<4;i++) scanf("%d",&cot[i]); if(n==0)return 0; for(int i=0;i<=n;i++) dp[i]=-100001; dp[0]=0; for(int i=0;i<4;i++) { if(cot[i]==0)continue; if(value[i]*cot[i]>=n) { for(int j=value[i];j<=n;j++) if(dp[j-value[i]]+1>dp[j]) { dp[j]=dp[j-value[i]]+1; v[j].va=i; v[j].co=1; } } else { int k=1; int tmp=cot[i]; while(k<tmp) { zero(value[i],i,k); tmp-=k; k*=2; } zero(value[i],i,tmp); } } if(dp <=0)puts("Charlie cannot buy coffee."); else { // for(int i=0;i<=n;i++) // printf("%d : %d*%d\n",i,v[i].co,v[i].va); memset(cot,0,sizeof(cot)); while(n) { int i=v .va; int co=v .co; cot[i]+=co; // printf("%d ==\n",co); n-=value[i]*co; } printf("Throw in %d cents, %d nickels, %d dimes, and %d quarters.\n",cot[0],cot[1],cot[2],cot[3]); } } }
相关文章推荐
- POJ 1787 Charlie's Change 背包问题
- poj 1787 Charlie's Change
- POJ 1787 Charlie's Change
- POJ 1787 Charlie's Change 背包问题
- POJ 1787 Charlie's Change
- poj 1787 Charlie's Change(背包问题输出路径)
- poj 1787 Charlie's Change
- poj 1787 Charlie's Change 题解(动态规划)
- POJ - 1787 Charlie's Change(完全背包和路径纪录)
- POJ 1787 Charlie's Change 最多金币
- POJ 1784 Charlie's Change 记录路径的多重背包
- POJ 1787 Charlie's Change / 完全背包
- zoj 2156 - Charlie's Change
- POJ1787:Charlie's Change(记录路径的多重背包)
- Charlie&#39;s Change(完全背包+路径记忆)
- poj1787 Charlie's Change 完全背包
- POJ 1787 Charlie's Change
- zoj2156 Charlie's Change 完全背包+路径记录
- poj1787 Charlie's Change
- ZOJ 2156 Charlie's Change 多重背包(带路径)