标签:des style blog http color os io 使用 ar
Time Limit: 1000MS | Memory Limit: 30000K | |
Total Submissions: 10660 | Accepted: 6612 |
Description
Input
Output
Sample Input
2 4 -2 3 3 4 5 8
Sample Output
2
题目链接:Balance
思路:给出天平的挂钩与砝码,问使用全部砝码能让天平有多少种平衡的方法.dp来做.
dp[i][j]表示挂i个砝码平衡状态为j时的种数.
我们定义
loc[]表示挂钩的位置.w[]表示砝码的重量.
dp[i][j + w[i]*loc[k]] = ∑(dp[i-1][j])
dp[0][7500] = 1;
由于会出现负数,所以这里整体平移.
1 /*====================================================================== 2 * Author : kevin 3 * Filename : Balance.cpp 4 * Creat time : 2014-08-17 18:24 5 * Description : 6 ========================================================================*/ 7 #include <iostream> 8 #include <algorithm> 9 #include <cstdio> 10 #include <cstring> 11 #include <queue> 12 #include <cmath> 13 #define clr(a,b) memset(a,b,sizeof(a)) 14 #define M 15005 15 using namespace std; 16 int dp[30][M+5]; 17 int w[30]; 18 int loc[30]; 19 int main(int argc,char *argv[]) 20 { 21 int c,g; 22 while(scanf("%d%d",&c,&g) != EOF){ 23 clr(dp,0); 24 for(int i = 1; i <= c; i++){ 25 scanf("%d",&loc[i]); 26 } 27 for(int i = 1; i <= g; i++){ 28 scanf("%d",&w[i]); 29 } 30 dp[0][7500] = 1; 31 for(int i = 1; i <= g; i++){ 32 for(int j = 1; j < M; j++){ 33 if(dp[i-1][j]){ 34 for(int k = 1; k <= c; k++){ 35 dp[i][j + w[i] * loc[k]] += dp[i-1][j]; 36 } 37 } 38 } 39 } 40 printf("%d\n",dp[g][7500]); 41 } 42 return 0; 43 }
标签:des style blog http color os io 使用 ar
原文地址:http://www.cnblogs.com/ubuntu-kevin/p/3956642.html