题意:一杆秤上有c个可以挂砝码的钩子和g个砝码,给出钩子的位置,求平衡方案数。
解:从后往前推就得了。因为有负数,所以整体往后移一倍。就是一开始没看懂钩子是干嘛的,还以为是初始条件。。。。
代码:
1 #include<stdio.h> 2 #include <algorithm> 3 #include <queue> 4 #include <stdlib.h> 5 using namespace std; 6 #define ll long long 7 #define maxx 2005 8 #define inf 0x3f 9 //#define int long long 10 int dp[25][15005]={0}; 11 signed main() { 12 int c,g; 13 scanf("%d%d",&c,&g); 14 int a[maxx],b[maxx]; 15 for(int i=1;i<=c;i++) 16 scanf("%d",&a[i]); 17 for(int i=1;i<=g;i++) 18 scanf("%d",&b[i]); 19 dp[0][7500]=1; 20 for(int i=1;i<=g;i++) { 21 for (int j = 0; j <= 15000; j++) 22 for (int k = 1; k <= c; k++) 23 if (dp[i - 1][j]) 24 dp[i][j + a[k] * b[i]] += dp[i - 1][j]; 25 } 26 printf("%d\n",dp[g][7500]); 27 return 0; 28 }
//QAQ