https://vijos.org/p/1025
简单的01背包
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
#include<cstdlib>
#define ms(i,j) memset(i,j,sizeof(i));
using namespace std;
const int maxt = 1000 + 5;
int v[105], w[105];
int f[maxt];
int main()
{
int n,t;
scanf("%d%d", &n ,&t);
for (int i=1;i<=n;i++)
{
scanf("%d%d", &v[i], &w[i]);
}
ms(f,0);
for (int i=1;i<=n;i++)
for (int j=t;j>=0;j--)
{
if (j>=w[i])
{
f[j] = max(f[j], f[j-w[i]]+v[i]);
}
}
printf("%d\n", f[t]);
return 0;
}

本文通过一个具体的01背包问题实例,介绍了如何使用C++实现01背包算法。该算法适用于解决物品不可分割的选择问题,代码中详细展示了动态规划求解过程。

639

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



