USACO 3.1 Stamps (邮票) dp

dp[i]=min(dp[i-ar[j]]+1,dp[i]);

dp[i]表示第i个数最少需要邮票数

第一个自己想出来的,呵呵,虽然很简单..

View Code
 1 #include <stdio.h>
2 #include <algorithm>
3
4 using namespace std;
5
6 int dp[2000005],ar[200];
7
8 int main()
9 {
10 int k,n,i,j;
11 while(scanf("%d%d",&k,&n)!=EOF)
12 {
13 dp[0]=0;
14 for (i=0;i<n;i++)scanf("%d",&ar[i]);
15 sort(ar,ar+n);
16 for (i=1;;i++)
17 {
18 dp[i]=0x3f3f3f3f;
19 for (j=0;j<n;j++)
20 {
21 if(i<ar[j])break;
22 dp[i]=min(dp[i-ar[j]]+1,dp[i]);
23 }
24 if(dp[i]>k)break;
25 }
26 printf("%d\n",i-1);
27 }
28 return 0;
29 }



转载于:https://www.cnblogs.com/104-gogo/archive/2011/10/29/2228930.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值