POJ-1837 Balance

Posted on 2021-12-13 20:40  Capterlliar  阅读(13)  评论(0编辑  收藏  举报

题意:一杆秤上有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 }
View Code

 

//QAQ