建站大师阙梅娇简介哪个搜索引擎能搜敏感内容
老样子,我们还是先定义状态表示f[i][j]表示从1到i个背包里,选出重量不超过T的最大价值
接着我们推导状态转移方程
这里我们多重背包就没办法和完全背包一样做优化了,因为我们多重背包毕竟选的数量是受限制的
第三步,初始化,我们全部初始化为0就行了
第四步,结果就存储在我们的f[n][m]里面
实现一下代码
#include <iostream>
using namespace std;
const int N = 210;
int f[N][N];
int w[N],v[N],x[N];
int n,m;
int main()
{cin >> n >> m;for(int i = 1;i<=n;i++){cin >> x[i] >> w[i] >> v[i];}for(int i = 1;i<=n;i++){for(int j = 0;j<=m;j++){f[i][j] = f[i-1][j];for(int k = 1;k<=x[i];k++){if(j>=k*w[i])f[i][j] = max(f[i][j],f[i-1][j-k*w[i]]+k*v[i]);}}}cout << f[n][m];return 0;
}
下一篇文章我们来说一下二进制优化版本的多重背包~