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;
}

  

posted on 2011-07-22 19:11  sysu_mjc  阅读(115)  评论(0编辑  收藏  举报

导航