Bone Collector hdu2602
标签:01背包
/*
01背包水题, 模板(节省一维空间)(N个物品, V容量背包, volume: 物品体积, value:物品价值)
for(int i = 0; i < N; i++)
for(int j = V; j >= volume[i]; j--)
dp[j] = max(dp[j], dp[j - volume[i]] + value[i]);
printf("%d\n", dp[V]);
很棒的讲解:http://blog.youkuaiyun.com/stack_queue/article/details/53544109
练习:http://blog.youkuaiyun.com/yexiaohhjk/article/details/50229489
*/
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
const int maxn = 1005;
int value[maxn], volume[maxn], dp[maxn];
int main()
{
int T;
scanf("%d", &T);
while(T--)
{
int N, V;
scanf("%d %d", &N, &V);
for(int i = 0; i < N; i++) scanf("%d", &value[i]);
for(int i = 0; i < N; i++) scanf("%d", &volume[i]);
memset(dp, 0, sizeof(dp)); //ZeroOnePack template
for(int i = 0; i < N; i++)
for(int j = V; j >= volume[i]; j--)
dp[j] = max(dp[j], dp[j - volume[i]] + value[i]);
printf("%d\n", dp[V]);
}
return 0;
}
本文详细介绍了01背包问题的经典解决方案,并提供了一个节省一维空间的模板代码实现。通过具体的代码示例,帮助读者理解如何使用动态规划解决01背包问题,并附带了额外的学习资源。
1万+

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



