题目描述
和抓宠物小精灵一样,有两个限制因素,注意空间优化即可
#include <iostream>
using namespace std;
const int N=1020;
int v[N],w[N],value[N];
int f[N][N];
int main()
{
int n,vm,wm;
cin>>n>>vm>>wm;
for(int i=1;i<=n;i++)
{
cin>>v[i]>>w[i]>>value[i];
}
for(int i=1;i<=n;i++)
{
for(int j=vm;j>=1;j--)
{
for(int k=wm;k>=1;k--)
{
if(j>=v[i] && k>=w[i])
{
f[j][k]=max(f[j][k],f[j-v[i]][k-w[i]]+value[i]);
}
}
}
}
cout<<f[vm][wm];
return 0;
}
2023/11/27
二维背包
注意空间优化,用三维的f[i][j][k]表示内存会爆,要优化掉一维
在做了宠物小精灵那题之后成功ac,没什么区别
#include <iostream>
using namespace std;
const int N=1010;
int v[N],m[N],w[N];
int f[N][N];
int n, volume, mass;
int main()
{
cin>>n>>volume>>mass;
for(int i=1;i<=n;i++)
{
cin>>v[i]>>m[i]>>w[i];
}
for(int i=1;i<=n;i++)
{
for(int j=volume;j>=0;j--)
{
for(int k=mass;k>=0;k--)
{
if(j>=v[i] && k>=m[i])
{
f[j][k] = max(f[j][k], f[j-v[i]][k-m[i]] + w[i]);
}
}
}
}
cout<<f[volume][mass];
return 0;
}