第五讲 二维费用的背包问题 HD FATE(二维完全背包)
FATE
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 10465 Accepted Submission(s): 4962
问题
二维费用的背包问题是指:对于每件物品,具有两种不同的费用;选择这件物品必须同时付出这两种代价;对于每种代价都有 一个可付出的最大值(背包容量)。问怎样选择物品可以得到最大的价值。设这两种代价分别为代价1和代价2,第i件物品所需的两种代价分别为a[i]和 b[i]。两种代价可付出的最大值(两种背包容量)分别为V和U。物品的价值为w[i]。
算法
费用加了一维,只需状态也加一维即可。设f[i][v][u]表示前i件物品付出两种代价分别为v和u时可获得的最大价值。状态转移方程就是:
f[i][v][u]=max{f[i-1][v][u],f[i-1][v-a[i]][u-b[i]]+w[i]}
如前述方法,可以只使用二维的数组:当每件物品只可以取一次时变量v和u采用逆序的循环,当物品有如完全背包问题时采用顺序的循环。当物品有如多重背包问题时拆分物品。这里就不再给出伪代码了,相信有了前面的基础,你能够自己实现出这个问题的程序。
代码如下:
#include<iostream>//c++
#include<cmath>//数学公式
#include<cstdlib>//malloc
#include<cstring>
#include<string>
#include<cstdio>//输入输出
#include<algorithm>//快排
#include<queue>//队列
#include<functional>//优先队列
#include<stack>//栈
#include<vector>//容器
#include<map>//地图 if continue
typedef long long ll;
const int N=115;
using namespace std;
int dp[N][N];
int main()
{
// freopen("C:\\Users\\ch\\Desktop\\1.txt","r",stdin);//freopen("C:\\Users\\lenovo\\Desktop\\2.txt","w",stdout);int i,j,k;int n,m,s,a,b,v;while(~scanf("%d%d%d%d",&m,&v,&n,&s)){memset(dp,0,sizeof(dp));int ans=0;for(k=0;k<n;k++)//个数{cin>>a>>b;for(i=1;i<=s;i++)//条件一for(j=b;j<=v;j++)//条件二{dp[j][i]=max(dp[j][i],dp[j-b][i-1]+a);if(dp[j][i]>=m) ans=max(ans,v-j);//找满足条件的最大差}}if(dp[v][s]<m) cout<<"-1"<<endl;else cout<<ans<<endl;}return 0;
}
第五讲 二维费用的背包问题 HD FATE(二维完全背包)相关推荐
- 潜水员 ← 二维费用的背包问题
[题目来源] https://www.acwing.com/problem/content/1022/ [题目描述] 潜水员为了潜水要使用特殊的装备. 他有一个带2种气体的气缸:一个为氧气,一个为氮气 ...
- 背包九讲之五(二维费用的背包问题)
http://acm.fafu.edu.cn/problem.php?id=1499 1 /* 2 二维费用的背包问题是指:对于每件物品,具有两种不同的费用, 3 选择这件物品就必须付出这两种代价,每 ...
- HDU 2159 FATE 动态规划二维费用的背包问题
http://acm.hdu.edu.cn/showproblem.php?pid=2159 题意: 给出的n , m , k ,s 分别代表还需n经验升级.还有m耐久度.下面有k组数据.最多能杀s只 ...
- 九大背包问题专题--二维费用的背包问题
5.二维费用的背包问题 问题: 有N件物品和一个容量是V的背包,背包能承受的最大重量是M. 每件物品只能用一次,体积是vi,重量是mi,价值是wi. 求解将哪些物品装入背包,可使这些物品的总体积不超过 ...
- xynuoj 1423 贪婪戈尔曼(二维费用的背包问题)
1423: 贪婪戈尔曼 时间限制: 1 Sec 内存限制: 128 MB 提交: 26 解决: 16 您该题的状态:已完成 [提交][状态][讨论版] 题目描述 从前有2只狗,大的叫大狗,小的叫小 ...
- acwing算法题--二维费用的背包问题
原题链接:https://www.acwing.com/problem/content/8/ #include <iostream>using namespace std;const in ...
- 潜水员(二维费用的背包问题)
[题目描述] 潜水员为了潜水要使用特殊的装备.他有一个带2种气体的气缸:一个为氧气,一个为氮气.让潜水员下潜的深度需要各种的数量的氧和氮.潜水员有一定数量的气缸.每个气缸都有重量和气体容量.潜水员为了 ...
- 背包问题进阶优雅总结【二维费用+分组+有依赖】
目录 作者有话说 二维费用的背包问题 状态定义及转移 物品总个数的限制 小结 分组的背包问题 状态定义及转移 小结 有依赖的背包问题(重要) 分析 最后是非常不正经的ending 作者有话说 本篇博文 ...
- 二维费用 hdu 2159 FATE(完全背包)HDU OJ 4501 小明系列故事——买年货【DP】
二维费用的背包问题是指:对于每件物品,具有两种不同的费用:选择这件物品必须同时付出这两种代价:对于每种代价都有一个可付出的最大值(背包容量).问怎样选择物品可以得到最大的价值.设这两种代价分别为代价1 ...
最新文章
- linux反汇编暴力破解,逆向教程之-反编译apk暴力去除弹窗和更新提示(三)
- 自己动手用gensim 生成句子的word2vec 向量
- IDEA 创建Web项目并在Tomcat中部署运行
- Android持久化存储(3)SQLite数据库的使用
- 133. Clone Graph 克隆图
- 远程连接mysql库问题
- linux自带mysql启动不_Linux系统自带的MySQL 数据库启动问题
- Java 11 将至,不妨了解一下 Oracle JDK 之外的版本
- Unity GUI屏幕自适应
- PAT甲题题解-1077. Kuchiguse (20)-找相同后缀
- python、java、C三种方法打印乘法表
- Java构造器(构造方法)与方法区别
- 压缩感知 热身实验 OMP算法Python实现(详细代码注释)
- html5 游戏 性能测试工具,没事跑个分!几款Chrome内核浏览器性能测试
- EndNote X7集成到office word2016(原有EndNote选项卡,却突然消失)
- [转载]Win7微软官方正式版原版镜像下载总汇(附win7 OEM KEY密钥)
- 计算机中文档的后退键,后退快捷键ctrl加什么
- 购物系统 java代码_java购物系统源代码
- excel日期相减去除周末_在Excel中突出显示周末日期
- Oracle数据库管理系统(安装及入门教学)
热门文章
- 政法委社会治安防控平台建设,重点人员联防联控系统开发
- Android ConstraintLayout约束布局的使用
- java 企业网站源码模版 有前后台 springmvc SSM 生成静态化
- SpringBoot优雅退出
- 做销售的要背下来!太经典了
- 米尔电子 MYC-Y6ULX-V2核心板在机械智能控制器的应用
- 验证站点怎么添加网站首页html代码,百度站长平台添加站点通过验证图文详解教程...
- 英语中有些单词缩写后面为什么要加个点
- 双线路带宽叠加后,指定网站走指定线路!
- HTML4.01、XHTML 1.0、HTML5版本变化