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 }