题目链接: 点击打开链接
题目大意:
思路: 01背包,dp
分析:
常规01背包题,一维数组
代码:
#include <cstdio>
#include <algorithm>
#include <memory.h>
using namespace std;
const int maxn = 1000 + 10;
const int maxv = 1000 + 10;
int n, v;
int dp[maxv], value[maxn], vol[maxn];
void solve()
{
memset(dp, 0, sizeof(dp));
for (int i = 1; i <= n; ++i)
for (int j = v; j >= 0; --j)
if (j >= vol[i])
dp[j] = max(dp[j], dp[j-vol[i]] + value[i]);
}
int main()
{
int t;
scanf("%d", &t);
while (t--)
{
scanf("%d %d", &n, &v);
for (int i = 1; i <= n; ++i)
scanf("%d", &value[i]);
for (int i = 1; i <= n; ++i)
scanf("%d", &vol[i]);
solve();
printf("%d\n", dp[v]);
}
return 0;
}