01背包,没有任何变形,模板题。
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <vector>
#include <cstring>
#include <string>
using namespace std; // 01背包 最基础
const int MAX = 1001;
int N, V, T;
int p[MAX];
int w[MAX];
int dp[MAX];
void init()
{
memset(dp, 0, sizeof dp);
}
int main()
{
scanf("%d", &T);
for (; T--;)
{
scanf("%d%d", &N, &V);
init();
for (int i = 1; i <= N; i++)
scanf("%d", &p[i]);
for (int i = 1; i <= N; i++)
scanf("%d", &w[i]);
for (int i = 1; i <= N; i++)
{
for (int j = V; j >= w[i]; j--) // 01背包倒序
{
dp[j] = max(dp[j], dp[j - w[i]] + p[i]);
}
}
printf("%d\n", dp[V]);
}
return 0;
}