01型背包问题解题总结(二维)
前言:01型背包问题(一维)的链接:
https://blog.csdn.net/qq_56430444/article/details/118157798
完全背包问题链接:
https://blog.csdn.net/qq_56430444/article/details/118389012
01型背包问题的模板(二维):
1.状态:dp[i][j]表示状态i和状态j下背包所能装置的最大价值。
2.状态转移方程: if ( i>= w1[i] && j>=w2[j] ){ dp[i][j] = max ( dp[i-w1[j]][j-w2[j]]+v[j],dp[i][j] ) }
3.循环方向: for(枚举第一个状态,逆向)
for(枚举第二个状态,逆向)
决策(状态转移方程)
4.初始化:看题目而定
01型背包问题经典例题(二维):
1.音量调节: 这一题与往常题不同的是他将物品算作状态中,以及状态转移方程的不同,这里也在告诫我做题不要死做题,就是今年的河南省icpc七便士哪里,不要让思维固化。
#include<bits/stdc++.h>
using namespace std;
int n,bl,ml;
int dp[100][1200];
int h[100];
int main(){cin>>n>>bl>>ml;for(int i=1;i<=n;i++){cin>>h[i];}dp[0][bl]=1;for(int i=1;i<=n;i++){for(int j=0;j<=ml;j++){if(dp[i-1][j]&&(j+h[i])<=ml){dp[i][j+h[i]]=1; //就是这里的状态转移方程让我感觉很突兀,但事实证明这是对} //的if(dp[i-1][j]&&(j-h[i])>=0){dp[i][j-h[i]]=1;}}}for(int i=ml;i>=0;i--){if(dp[n][i]){cout<<i<<endl;return 0;}}cout<<-1;return 0;
}
2.找啊找啊找GF( <-_<- 搞acm的还想找女朋友?? ):这一题的新颖之处在于要用到两个dp数组,一个数组用于记录最多能找到的女朋友,另一个记录找这么多的女友所用到的最短时间,两个数组的下标含义都相同,并且由这句话:表示 sqybi 在保证 MM 数量的情况下花费的最少总时间是多少, 可以知道 女友的数量的优先级比相同数目下的找女友所耗费的时间要高,这就可以判断if的先后顺序啦。
#include<bits/stdc++.h>
using namespace std;
int q[200],r[200],t[200];
int n,m,rp;
int dp[1200][1200];
int ti[1200][1200];
vector<int>ans[100001];
int main(){cin>>n;for(int i=1;i<=n;i++){cin>>q[i]>>r[i]>>t[i];}cin>>m>>rp;int maxn=0,minn=100001;//枚举物品循环放在第一个for(int k=1;k<=n;k++){for(int i=m;i>=1;i--){for(int j=rp;j>=1;j--){if(i>=q[k]&&j>=r[k]){if(dp[i-q[k]][j-r[k]]+1>dp[i][j]){dp[i][j]=dp[i-q[k]][j-r[k]]+1;ti[i][j]=ti[i-q[k]][j-r[k]]+t[k];}else if((dp[i-q[k]][j-r[k]]+1)==dp[i][j]){if((ti[i-q[k]][j-r[k]]+t[k])<ti[i][j]){ti[i][j]=ti[i-q[k]][j-r[k]]+t[k];}}}if(maxn<=dp[i][j]){maxn=dp[i][j];ans[maxn].push_back(ti[i][j]);}}}}for(int i=0;i<ans[maxn].size();i++){if(minn>ans[maxn][i]){minn=ans[maxn][i];}}cout<<minn;
}
01型背包问题解题总结(二维)相关推荐
- 01背包问题动态规划(二维数组)
01背包问题动态规划(二维数组) 问题描述 一个旅行者有一个最多能装 M 公斤的背包,现在有 n 件物品,它们的重量分别是W1,W2,-,Wn,它们的价值分别为C1,C2,-,Cn,求旅行者能获得 ...
- 第五讲 二维费用的背包问题 HD FATE(二维完全背包)
FATE Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- 概统 | 连续型概率分布——正态分布(二维)
编辑 设二维连续型随机变量(X,Y)的联合概率密度为
- 连续型概率分布——正态分布(二维)
1. 定义:设二维连续型随机变量(X,Y)的联合概率密度为 其中μ1,μ2,σ1,σ2,ρ均为常数,且σ1>0, σ2>0, |ρ|<1则称(X,Y)服从参数为μ1,μ2,σ1,σ2 ...
- JAVA描述算法和数据结构(01):稀疏数组和二维数组转换
一.基本简介 1.基础概念 在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵:与之相反,若非0元素数目占大多数时,则称该矩阵为稠密矩阵.定义非零元 ...
- java 二维数据结构_JAVA描述算法和数据结构(01):稀疏数组和二维数组转换
一.基本简介 1.基础概念 在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵:与之相反,若非0元素数目占大多数时,则称该矩阵为稠密矩阵.定义非零元 ...
- 【python】一篇讲透背包问题(01背包 完全背包 多重背包 二维费用背包)
面对背包问题,有一个很重要的方程式:状态转移方程式 所以每一种背包问题我都会给出状态转移方程式 #01背包 什么是01背包型问题? 先给大家感受一下01背包型问题: 给定n种物品和一背包.物品i的重量 ...
- 潜水员 ← 二维费用的背包问题
[题目来源] https://www.acwing.com/problem/content/1022/ [题目描述] 潜水员为了潜水要使用特殊的装备. 他有一个带2种气体的气缸:一个为氧气,一个为氮气 ...
- [01背包] 宠物小精灵之收服(01背包+二维费用背包+思维)
文章目录 0. 前言 1. 01背包裸题 0. 前言 相关: [背包] 背包问题算法模板(模板) 1. 01背包裸题 1022. 宠物小精灵之收服 每个精灵仅被收服一次,故可以考虑 01 背包,是典型 ...
最新文章
- sql中如何统计各种零件的总数量_[Python]提取数据库中数据, 用人货场的分析方法, 对电商双十一促销活动结果数据进行复盘分析...
- 使用Redis分布式锁处理并发,解决超卖问题
- RMAN中catalog和nocatalog区别
- 浏览器禁用Cookie,基于Cookie的会话跟踪机制失效的解决的方法
- mysql的主要指标_mysql 主要性能指标
- postgresql 中int4rang类型项目应用
- Stylus Loader has been initialized using an options object that does not match the API schema.
- 【Java视频教程等百度云资源分享】
- php来源德育管理系统,西安交通大学城市学院学生服务中心互联网学生工作管理系统...
- linux云服务器,Tomcat服务器常见 The value for the useBean class attribute is invalid 错误
- 网络创业:网站盈利模式分析分类
- 在 Azure ML 上用 .NET 跑机器学习
- sigmoid函数和阶跃函数的Python代码比较 ← 斋藤康毅
- Python PEP8编码规范(中文版)
- 2021-04-24
- 2021毕业年的最后一躺
- 网站建设要怎么选择域名?有哪些小技巧?
- 中国版ChatGPT在哪些方面具有快速发展的机会?
- Redis源码剖析和注释(二十四)--- Redis Sentinel实现(哨兵操作的深入剖析)
- 【Java程序设计】实验七 网络通信