题目链接: http://poj.org/problem?id=1837
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#define PI acos(-1.0)
#define max(a,b) (a)>(b)? (a):(b)
#define min(a,b) (a)>(b)? (b):(a)
#define INT_MIN -0x7FFFFFFF
#define INT_MAX 0x7FFFFFFF
int f[25][15000];//表示 前I个砝码,J 平衡度-7500~7500 时的方案数
int cc[25],v[25];
int main()
{
// freopen("in.txt","r",stdin);
int c,g,i,j,k;
while(scanf("%d%d",&c,&g)!=EOF)
{
for(i=0;i<c;i++)
scanf("%d",&cc[i]);
for(i=0;i<g;i++)
scanf("%d",&v[i]);
memset(f,0,sizeof(f));
f[0][7500]=1;//初始满足
for(i=0;i<g;i++)
{
for(j=-3750;j<=3750;j++)//多于一半肯定无法满足条件
{
if(f[i][j+7500]!=0)
{
for(k=0;k<c;k++)
{
f[i+1][j+7500+v[i]*cc[k]]+=f[i][j+7500];
}
}
}
}
printf("%d\n",f[g][7500]);
}
return 0;
}