poj 1837 Balance
#include<iostream> //dp
using namespace std;
const int m=7505;
int w[25],hook[25],dp[25][2*m];
int main()
{
int c,g,i,j,k;
cin>>c>>g;
for(i=1;i<=c;++i)
{
cin>>hook[i];
}
for(i=1;i<=g;++i)
{
cin>>w[i];
}
for(i=1;i<=c;++i)
dp[1][hook[i]*w[1]+m]++; //+m 使得dp数组的下标可以不小于0
for(i=2;i<=g;++i)
for(j=1;j<=c;++j)
for(k=0;k<=2*m;++k)
dp[i][hook[j]*w[i]+k]+=dp[i-1][k]; //状态转移方程
cout<<dp[g][m]<<endl;
return 0;
}