多重背包(洛谷)

编程入门 行业动态 更新时间:2024-10-07 00:16:24

多重<a href=https://www.elefans.com/category/jswz/34/1767487.html style=背包(洛谷)"/>

多重背包(洛谷)

多重背包链接(洛谷)

一.分析题目:

有n种物品,每种物品有多件,而且每种物品的体积和价值不变。

二.用集合的方式表示:

我们用一个f[i,j]表示,从i件物品中选,且所选物品的总体积不超过j的所有选法的集合,然后我们再选出这些方案中最有价值的一个方案我们用max表示。

三.计算集合:

f[i,j]枚举i种物品中选几个,假如我们选k*v[i](k*v[i]<=i)件物品,而且选的这k*v[i]件物品的总价值为k*w[i],那么就可以推出这个式子: f[i,j]=max(f[i-1][j-k*v[i]]+k*w[i],f[i,j])

代码如下:

#include<iostream>
using namespace std;
const int N=110;
int n,m;
int f[N][N];
int v[N],s[N],w[N];
int main(){cin>>n>>m;for(int i=1;i<=n;i++)cin>>v[i]>>w[i]>>s[i];for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){for(int k=0;k<=s[i]&&k*v[i]<=j;k++){f[i][j]=max(f[i][j],f[i-1][j-k*v[i]]+k*w[i]);}}cout<<f[n][m];return 0;
} 

更多推荐

多重背包(洛谷)

本文发布于:2024-02-13 16:51:08,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1759997.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:背包   洛谷

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!