首页 > 系统服务 > 详细

POJ 1276 (多重背包) Cash Machine

时间:2015-02-13 23:34:51      阅读:399      评论:0      收藏:0      [点我收藏+]

题意:

有n种纸币,已知每种纸币的面值和数量,求所能凑成的不超过cash的最大总面值。

分析:

这道题自己写了一下TLE了,好可耻。。

找了份比较简洁的代码抄过来了。。poj1276

技术分享
 1 #include <cstdio>
 2 #include <cstring>
 3 
 4 const int maxn = 12;
 5 const int maxp = 100000 + 10;
 6 
 7 bool vis[maxp];//是否到达总面值i
 8 int used[maxp];//到达总面值i时,该种纸币所用的数量
 9 int a[maxn], b[maxn];//每种纸币的数量以及面值
10 
11 int cash, n;
12 
13 int main()
14 {
15     //freopen("in.txt", "r", stdin);
16 
17     while(scanf("%d", &cash) == 1)
18     {
19         scanf("%d", &n);
20         for(int i = 0; i < n; ++i) scanf("%d%d", &a[i], &b[i]);
21 
22         memset(vis, false, sizeof(vis));
23         vis[0] = true;
24         for(int i = 0; i < n; ++i)
25         {
26             memset(used, 0, sizeof(used));
27             for(int j = b[i]; j <= cash; ++j)
28                 if(vis[j-b[i]] && !vis[j] && used[j-b[i]] < a[i])
29                 { vis[j] = true; used[j] = used[j-b[i]] + 1; }
30         }
31 
32         for(int i = cash; i >= 0; --i) if(vis[i]) { printf("%d\n", i); break; }
33     }
34 
35     return 0;
36 }
代码君

 

POJ 1276 (多重背包) Cash Machine

原文:http://www.cnblogs.com/AOQNRMGYXLMV/p/4290972.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!