二维费用背包问题
创始人
2024-05-15 09:16:11
0

二维费用背包问题

  • 一、问题
  • 二、思路
    • 1、状态表示
    • 2、状态转移
    • 3、循环设计
    • 4、注意
  • 三、代码

一、问题

在这里插入图片描述

二、思路

这道题归根结底还是背包问题的一种,面对背包问题,我们的思路就是面对前i个物品的时候,我们的第i个物品是选还是不选,如果条件允许的话,我们在二者之间选出一个最大值。

1、状态表示

f[i][j][k]f[i][j][k]f[i][j][k]面对前iii个物品,容量是jjj,承受重量是kkk的时候,我们所能携带的物品的最大价值。

2、状态转移

f(i,j,k)={f(i−1,j,k)max(f(i,j−v[i],k−m[i])+w[i],f(i−1,j,k))j≥v[i]&&k≥m[i]f(i,j,k)= \begin{cases} f(i-1,j,k)\\ max\big(f(i,j-v[i],k-m[i])+w[i],f(i-1,j,k)\big)&j\geq v[i]\&\&k\geq m[i] \end{cases} f(i,j,k)={f(i−1,j,k)max(f(i,j−v[i],k−m[i])+w[i],f(i−1,j,k))​j≥v[i]&&k≥m[i]​

3、循环设计

三重循环即可,背包问题我们一般是把物品iii放在最外层循环,这样做的话,我们方便对空间进行优化。对于剩余的两个限制条件之间的循环顺序是无关紧要的。

4、注意

由于多重限制条件的存在,我们的f数组开到了3维,如果数据范围很大的话,可能没有办法开那么大的空间,因此,对于二维费用背包问题我们一般使用的是空间优化后的版本。

三、代码

#include
#include
using namespace std;
const int N=1010;
int a[N],b[N],c[N],f[N][N];
int n,v,m;
int main()
{cin>>n>>v>>m;for(int i=1;i<=n;i++){scanf("%d%d%d",a+i,b+i,c+i);}for(int i=1;i<=n;i++){for(int j=v;j>=0;j--){for(int k=m;k>=0;k--){if(a[i]<=j&&b[i]<=k){f[j][k]=max(f[j-a[i]][k-b[i]]+c[i],f[j][k]);}}}}cout<

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...