01背包。
最基础的01背包。
#include <iostream>
#include <cstring>
using namespace std;
const int MAX_N = 1000 + 10;
int T,n,v;
int value[MAX_N],weight[MAX_N];
int dp[MAX_N];
int main()
{
cin >> T;
while(T--)
{
memset(dp,0,sizeof(dp));
cin >> n >> v;
for(int i = 0;i < n;i++)
cin >> value[i];
for(int i = 0;i < n;i++)
cin >> weight[i];
for(int i = 0;i < n;i++)
{
for(int j = v;j >= weight[i];j--)
{
dp[j] = max(dp[j],dp[j - weight[i]] + value[i]);
}
}
cout << dp[v] << endl;
}
return 0;
}

被折叠的 条评论
为什么被折叠?



