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 }



posted @ 2011-10-29 22:57  104_gogo  阅读(260)  评论(0编辑  收藏  举报