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

[usaco3.1]邮票 Stamps

时间:2017-06-03 17:21:16      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:分析   isp   实现   nbsp   turn   code   个数   题目   表示   

题目链接

思路分析:

 dp[n]表示组成数字n最少需要多少张邮票

每读入一个x,我们就可以从x向2000000(最极限情况,即200张邮票和10000的面值)更新。

首先dp[n-x]必须<m 并且大于0,其次dp[n]必须>dp[n-x]+1(dp[n]=0除外),这样每次更新一次 dp[n]=dp[n-x]+1

最后从1遍历到2000000 如果中间出现断点就记录断点前一个数的值就可以了。

 

技术分享
 1 #include <cstdio>
 2 int dp[2000005],m,n,ans;
 3 int main(){
 4     scanf("%d%d",&m,&n);
 5     for(register int i=1;i<=n;i++){  
 6         int x; //register 是在寄存器里面运算 是为了加快速度
 7         scanf("%d",&x);
 8         dp[x] = 1;
 9         for(register int j=x+1;j<=2000000;j++){
10             if(dp[j-x] && dp[j-x]<m && (!dp[j] ||dp[j]>dp[j-x]+1)) dp[j] = dp[j-x]+1;
11         }
12     }
13     for(register int i=1;i<=2000000;i++){
14         if(dp[i]) ans=i;
15         else break;
16     }
17     printf("%d",ans);
18     return 0;
19 }
代码实现

 

[usaco3.1]邮票 Stamps

标签:分析   isp   实现   nbsp   turn   code   个数   题目   表示   

原文地址:http://www.cnblogs.com/OIerLYF/p/6935586.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!