http://blog.csdn.net/lyy289065406/article/details/6648094(参考此人代码和思路)
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int weightNum;
int hookNum;
int hook[21];
int weight[21];
int dp[21][15001];
/*
2 4
-2 3
3 4 5 8
*/
int main() {
cin >> hookNum >> weightNum;
for (int i = 1; i <= hookNum; i++)cin >> hook[i];
for (int i = 1; i <= weightNum; i++)cin >> weight[i];
memset(dp, 0, sizeof(dp));//memset是可以直接对二维赋值(只能是1或者0)
dp[0][7500] = 1;//这个需要直接操作一番,只是将最大满足值放在了中间.
for (int i = 1; i <= weightNum; i++) {
for (int j = 1; j <= 15000; j++) {
for (int k = 1; k <= hookNum; k++)
dp[i][j] += dp[i - 1][j - hook[k] * weight[i]];
}
}
cout << dp[weightNum][7500];
return 0;
}