标签:
Description
Input
Output
Sample Input
2 4 -2 3 3 4 5 8
Sample Output
2
大意:天枰问题,把背包变成零,因为下标不会出现负数,所以重新选择一个平衡点15*25*20=7500
递归方程 : dp[i][k+w[j]*v[i]]+=dp[i-1][j], 输出dp[m][7500],dp[i][j]表示经过加东西之后肯能到达平衡的点。
#include<cstdio> #include<cstring> #include<algorithm> #include<cstdlib> int dp[30][30000]; using namespace std; int main(){ int w[25],v[25]; int n,m; while(~scanf("%d%d", &n,&m)){ for(int i = 1; i <= n; i++) scanf("%d",&w[i]); for(int i = 1; i <= m; i++) scanf("%d",&v[i]); memset(dp, 0, sizeof(dp)); dp[0][7500] = 1; for(int i = 1; i <= m; i++){ for(int j = 1; j <= n; j++){ for(int k = 0; k <= 15000; k ++){ dp[i][k+w[j]*v[i]]+=dp[i-1][k]; } } } printf("%d\n", dp[m][7500]); } return 0; }
标签:
原文地址:http://www.cnblogs.com/zero-begin/p/4313342.html