原题链接:
http://acm.hdu.edu.cn/showproblem.php?pid=2602
题目大意:
给你n个骨头和一个容积为v的袋子。
求能盛下骨头的最大价值。
状态转移方程:
dp[ j ] = max(dp[ j ], dp[ j - boneV[i] ]+bonevalue[ i ]);
代码如下:
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int MAXN = 1000 + 10;
int bonevalue[MAXN],boneV[MAXN] ,dp[MAXN];
int main()
{
int T;
cin >> T;
while (T--)
{
memset(dp, 0, sizeof(dp));
int N, V;
cin >> N >> V;
for (int i = 1; i <= N; i++)
cin >> bonevalue[i];
for (int i = 1; i <= N; i++)
cin >> boneV[i];
for (int i = 1; i <= N; i++)
for (int j = V; j >= boneV[i]; j--)
dp[j] = max(dp[j], dp[j - boneV[i]]+bonevalue[i]);
cout << dp[V] << endl;
}
return 0;
}