POJ 1837 Balance(DP)

题目链接

开始看错题了,导致一直没找到节奏,看宝哥题解过的。

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <cmath>
 4 #include <string>
 5 #include <map>
 6 #include <algorithm>
 7 #include <queue>
 8 #include <vector>
 9 using namespace std;
10 #define C 7500  
11 int dp[21][20001];
12 int hook[101],wei[101];
13 int main()
14 {
15     int i,j,k,c,g;
16     scanf("%d%d",&c,&g);
17     for(i = 1;i <= c;i ++)
18     {
19         scanf("%d",&hook[i]);
20     }
21     for(i = 1;i <= g;i ++)
22     {
23         scanf("%d",&wei[i]);
24     }
25     dp[0][C] = 1;
26     for(i = 1;i <= g;i ++)
27     {
28         for(j = 1;j <= c;j ++)
29         {
30             for(k = -7500;k <= 7500;k ++)
31             {
32                 dp[i][k+hook[j]*wei[i]+C] += dp[i-1][k+C];//加C避免出现负数
33             }
34         }
35     }
36     printf("%d\n",dp[g][7500]);
37     return 0;
38 }

 

posted @ 2013-01-21 15:40  Naix_x  阅读(134)  评论(0编辑  收藏  举报