主要还是借助増维度的方式来记录数据.....然后滚动即可!!!
感谢羊大神!!!!!!!!
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35#include<cstdio> #include<cstring> struct noi{ int val; int amo; }; int main() { int coffee,i,j,T[10000][5]={0}; noi coin[4]; while(scanf("%d%d%d%d%d",&coffee,&coin[0].amo,&coin[1].amo,&coin[2].amo,&coin[3].amo)!=EOF){ if(coffee==0&&coin[0].amo==0&&coin[1].amo==0&&coin[2].amo==0&&coin[3].amo==0)break; memset(T,0,sizeof(T)); coin[0].val=1,coin[1].val=5,coin[2].val=10,coin[3].val=25; for(i=0;i<4;i++){ for(j=coin[i].val;j<=coin[i].val*coin[i].amo&&j<=coffee;j++){ // printf("%d %d %d %dn",i+1,j,T[j][0],T[j-coin[i].val][0]+1); if(T[j][0]<T[j-coin[i].val][0]+1){ T[j][0]=T[j-coin[i].val][0]+1; T[j][1]=T[j-coin[i].val][1]; T[j][2]=T[j-coin[i].val][2]; T[j][3]=T[j-coin[i].val][3]; T[j][4]=T[j-coin[i].val][4]; T[j][i+1]++; } } } // printf("total?%dn",T[coffee][0]); if(T[coffee][0]==0)printf("Charlie cannot buy coffee.n"); else printf("Throw in %d cents, %d nickels, %d dimes, and %d quarters.n",T[coffee][1],T[coffee][2],T[coffee][3],T[coffee][4]); } return 0; }
最后
以上就是缓慢母鸡最近收集整理的关于记录路径的背包问题的全部内容,更多相关记录路径内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复