易错点
- 背包容量要和物品体积先进行比较,防止边界溢出
- 需要考虑到物品体积为0的情况
- 数组要从0编号到n(背包容量),而不是n-1,因为涉及到与体积的直接比较
#include <bits/stdc++.h>
using namespace std;
#define ll long long
int main()
{
ios::sync_with_stdio(false);
int T;
cin >> T;
while (T--)
{
int n, vol;
cin >> n >> vol;
int value[n];
int volume[n];
for (int i = 0; i < n; i++)
{
cin >> value[i];
}
for (int i = 0; i < n; i++)
{
cin >> volume[i];
}
ll choose[vol + 1];
memset(choose, 0, sizeof(choose));
for (int i = 0; i < n; i++)
{
for (int j = vol; j >= 0; j--)
{
if (j - volume[i] >= 0)
choose[j] = max(choose[j], choose[j - volume[i]] + value[i]);
}
}
cout << choose[vol] << endl;
}
}