USACO 2.3

<问题分析>

每个状态代表可表示的种类数 状态转移方程 s[j]=s[j-c[i]]+s[j]

 1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 int main()
 5 {
 6     int v,n,i,j,k,c[26],s[10001];
 7     scanf("%d %d",&v,&n);
 8     for(i=1;i<=v;i++)
 9     {
10         scanf("%d",&c[i]);                
11     }
12     memset(s,0,sizeof(int)*10001);
13     s[0]=1;
14     for(i=1;i<=v;i++)
15     {
16        for(j=0;j<=n;j++)
17        {
18           if(j-c[i]>=0) 
19           if(s[j-c[i]]>0)
20              s[j]+=s[j-c[i]];
21        }
22     }
23     printf("%d\n",s[n]);
24     while(true);
25     return 0;
26 }

 

posted @ 2013-07-02 11:08  simplesslife  阅读(158)  评论(0编辑  收藏  举报