- 01背包:每件物品最多只用一次
- 完全背包:每件物品有无限个
- 多重背包:每个物品有s[i]个
- 分组背包:物品有N组,每组物品有若干个,每组只能选一个物品
题目:01背包
#include <bits/stdc++.h>
using namespace std;
const int N=1010;
int w[N],f[N][N],v[N];
int n,m;
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>v[i]>>w[i];
for(int i=1;i<=n;i++)
{
for(int j=0;j<=m;j++)
{
f[i][j]=f[i-1][j];
if(j>=v[i])
f[i][j]=max(f[i][j],f[i-1][j-v[i]]+w[i]);
}
}
cout<<f[n][m];
}
题目:完全背包
#include <bits/stdc++.h>
using namespace std;
const int N=1010;
int w[N],v[N],f[N][N];
int n,m;
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>v[i]>>w[i];
for(int i=1;i<=n;i++)
{
for(int j=0;j<=m;j++)
{
f[i][j]=f[i-1][j];
if(j>=v[i])
f[i][j]=max(f[i][j],f[i][j-v[i]]+w[i]);
}
}
cout<<f[n][m];
}