天平问题
给一个天平,并且上面有许多的钩子(不是两个),前面以为一次性只能选两个钩子,结果不知道怎么下手,后来看清题目了才知道。然后有许多砝码,问把砝码加上去达到平衡状态的方案数。
测试用例分析:
2 4 代表有在天平上有两个钩子,砝码有四种
-2 3 钩子的位置,负数代表在左边,正数代表在右边
3 4 5 8 分别给出四种砝码的重量
什么时候达到平衡呢?就是臂力=臂长*重量,当两边的臂力相等的时候就会平衡了。
模拟dp,就这么做
代码如下
#include<stdio.h>
#include<string.h>
#include<math.h>
int i,j,k,n,m;
int a[25],b[25];
int f[25][15100];
void main()
{
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
for(i=1;i<=m;i++)
scanf("%d",&b[i]);
memset(f,0,sizeof(f));
f[0][7500]=1;
for(i=1;i<=m;i++)
for (k=1;k<=n; k++)
for(j=a[k]*b[i]+1;j<=15000;j++)
if(f[i-1][j-a[k]*b[i]]>0)
{
f[i][j]=f[i][j]+f[i-1][j-a[k]*b[i]];
}
printf("%d\n",f[m][7500]);
}