首页 > 其他 > 详细

poj_1276

时间:2015-03-06 16:27:21      阅读:165      评论:0      收藏:0      [点我收藏+]

dp[i] 代表能否凑出总数为i的cash

 1 #include <cstdio>
 2 #include <cstring>
 3 
 4 int n[11], d[11], cash, N;
 5 bool dp[100010];
 6 
 7 int main(int argc, char const *argv[])
 8 {
 9     // freopen("in", "r", stdin);
10     while(~scanf("%d%d", &cash, &N)){
11         for(int i = 1; i <= N; ++i)
12             scanf("%d %d", &n[i], &d[i]);
13         memset(dp, false, sizeof(dp));
14         dp[0] = true;
15         for(int i = 1; i <= N; ++i)
16             for(int j = cash; j >= 0; --j)
17                 if(dp[j] == true)
18                     for(int k = 1; k <= n[i]; ++k){
19                         if( j + k*d[i] > cash )
20                             break;
21                         dp[j + k*d[i]] = true;
22                     }
23         for(int i = cash; i >= 0; --i)
24             if(dp[i] == true){
25                 printf("%d\n", i);
26                 break;
27             }
28     }
29     return 0;
30 }

 

poj_1276

原文:http://www.cnblogs.com/takeoffyoung/p/4318452.html

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