码迷,mamicode.com
首页 > 其他好文 > 详细

poj_1276

时间:2015-03-06 16:28:41      阅读:139      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!