题目链接http://acm.hdu.edu.cn/showproblem.php?pid=2602
题意:01背包问题,属于水题,直接模板。
ac代码
#include<cstdio>
#include<iostream>
#include<string.h>
using namespace std;
const int M = 1000 + 1;
int max(int x, int y)
{
if(x > y)return x;
else return y;
}
int value[M], volume[M], dp[M];
int main()
{
int T;
int N, V;
scanf("%d", &T);
for (int t = 1; t <= T; t++)
{
memset(dp, 0, sizeof(dp));
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", &volume[i]);
for (int i = 1; i <= N; i++)
for (int j = V; j >= volume[i]; j--)
{
if (volume[i] <= j)
dp[j] = max(dp[j], dp[j - volume[i]] + value[i]);
}
printf("%d\n", dp[V]);
}
return 0;
}