poj 1787 Charlie's Change(背包问题输出路径)
来源:互联网 发布:中兴商城下载软件 编辑:程序博客网 时间:2024/06/07 01:22
好久没写背包了,刚一上手有点儿不知道怎么写。
刚开始的时候我想当然的用一个脑残的方法写了个脑残的代码,测试了六七个自己设计的脑残数据,竟然还全部通过了,提交WA。后来发现了错误,认认真真重新写了一遍,提交TLE。。。。
然后是漫长的优化,我想到的优化方案是背包九讲多重背包中提到的将物品数量利用二进制思想转化的方法,但是代码写出来,输入10000,10000,10000,10000,等了半天也没有出结果。就算这个方法不行,也不至于等那么长时间吧?
我又尝试了另一种优化方法,将代码按照完全背包去写,用一个num数组记录当前物品出现的次数。这个方法写出来,分析了一下时间复杂度,觉得铁定不可能超时了。然后我再测试10000,10000,10000,10000,还是没有结果。郁闷了很长时间,恍然发现我应该输入的是五个10000,我只输入了四个,都没有输入完。。。。。。。
记录路径的方法就是将dp[i]用一个结构体表示,在里面添加一个pre表示添加的物品。
#include<stdio.h>#include<string.h>#define N 10005struct node{ int x; int pre;} dp[N];int num[N];int main(){ int a[6]= {0,1,5,10,25}; int b[6]; int n; while(scanf("%d%d%d%d%d",&n,&b[1],&b[2],&b[3],&b[4]),n||b[1]||b[2]||b[3]||b[4]) { int i,j; for(i=1; i<=n; i++) dp[i].x=-1; dp[0].x=0; for(i=1; i<=4; i++) { memset(num,0,sizeof(num)); for(j=a[i]; j<=n; j++) { if(dp[j-a[i]].x+1>dp[j].x&&dp[j-a[i]].x!=-1) { num[j]=num[j-a[i]]+1; if(num[j]>b[i]) break; dp[j].x=dp[j-a[i]].x+1; dp[j].pre=i; } } } int cnt[6]; memset(cnt,0,sizeof(cnt)); int tt=n; while(tt&&dp[tt].x!=-1) { cnt[dp[tt].pre]++; tt-=a[dp[tt].pre]; } if(dp[n].x==-1) printf("Charlie cannot buy coffee.\n"); else printf("Throw in %d cents, %d nickels, %d dimes, and %d quarters.\n",cnt[1],cnt[2],cnt[3],cnt[4]); } return 0;}
- 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--1787--Charlie's Change--背包变形
- poj 1787 Charlie's Change(打印路径的多重背包 ->交易数量最大化)
- 【POJ】1787 Charlie's Change(完全背包)
- POJ 题目1787 Charlie's Change(完全背包)
- 动态规划,多重背包,保存路径,用完全背包的方法做多重背包(Charlie's Change,poj 1787)
- POJ-1787 Charlie's Change (完全背包+输出方案 入门题)
- Charlie's Change(POJ-1787)
- Charlie's Change(完全背包+路径记忆)
- POJ 3273 Monthly Expense 解题报告(二分枚举)
- Nodejs exports与module exports
- dll导入和导出变量或函数
- C#初学者——走台阶改进版,上个版本有点漏洞
- 理解Linux的性能
- poj 1787 Charlie's Change(背包问题输出路径)
- 孙其功陪你学之——OpenGL 光照和材料属性
- 张逸: ThoughtWorks(中国)程序员读书雷达
- android 单位转换API
- 快速排序
- Trap in Unix
- Sun T2000(Solaris 10)上安装MB-System的历程
- 获取Android控件的宽和高
- 国外程序员推荐的免费编程书籍资源