FATE

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 10465    Accepted Submission(s): 4962

Problem Description
最近xhd正在玩一款叫做FATE的游戏,为了得到极品装备,xhd在不停的杀怪做任务。久而久之xhd开始对杀怪产生的厌恶感,但又不得不通过杀怪来升完这最后一级。现在的问题是,xhd升掉最后一级还需n的经验值,xhd还留有m的忍耐度,每杀一个怪xhd会得到相应的经验,并减掉相应的忍耐度。当忍耐度降到0或者0以下时,xhd就不会玩这游戏。xhd还说了他最多只杀s只怪。请问他能升掉这最后一级吗?
Input
输入数据有多组,对于每组数据第一行输入n,m,k,s(0 < n,m,k,s < 100)四个正整数。分别表示还需的经验值,保留的忍耐度,怪的种数和最多的杀怪数。接下来输入k行数据。每行数据输入两个正整数a,b(0 < a,b < 20);分别表示杀掉一只这种怪xhd会得到的经验值和会减掉的忍耐度。(每种怪都有无数个)
Output
输出升完这级还能保留的最大忍耐度,如果无法升完这级输出-1。
Sample Input
  
10 10 1 10 1 1 10 10 1 9 1 1 9 10 2 10 1 1 2 2
Sample Output
  
0 -1 1

问题

二维费用的背包问题是指:对于每件物品,具有两种不同的费用;选择这件物品必须同时付出这两种代价;对于每种代价都有 一个可付出的最大值(背包容量)。问怎样选择物品可以得到最大的价值。设这两种代价分别为代价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(二维完全背包)相关推荐

  1. 潜水员 ← 二维费用的背包问题

    [题目来源] https://www.acwing.com/problem/content/1022/ [题目描述] 潜水员为了潜水要使用特殊的装备. 他有一个带2种气体的气缸:一个为氧气,一个为氮气 ...

  2. 背包九讲之五(二维费用的背包问题)

    http://acm.fafu.edu.cn/problem.php?id=1499 1 /* 2 二维费用的背包问题是指:对于每件物品,具有两种不同的费用, 3 选择这件物品就必须付出这两种代价,每 ...

  3. HDU 2159 FATE 动态规划二维费用的背包问题

    http://acm.hdu.edu.cn/showproblem.php?pid=2159 题意: 给出的n , m , k ,s 分别代表还需n经验升级.还有m耐久度.下面有k组数据.最多能杀s只 ...

  4. 九大背包问题专题--二维费用的背包问题

    5.二维费用的背包问题 问题: 有N件物品和一个容量是V的背包,背包能承受的最大重量是M. 每件物品只能用一次,体积是vi,重量是mi,价值是wi. 求解将哪些物品装入背包,可使这些物品的总体积不超过 ...

  5. xynuoj 1423 贪婪戈尔曼(二维费用的背包问题)

    1423: 贪婪戈尔曼 时间限制: 1 Sec  内存限制: 128 MB 提交: 26  解决: 16 您该题的状态:已完成 [提交][状态][讨论版] 题目描述 从前有2只狗,大的叫大狗,小的叫小 ...

  6. acwing算法题--二维费用的背包问题

    原题链接:https://www.acwing.com/problem/content/8/ #include <iostream>using namespace std;const in ...

  7. 潜水员(二维费用的背包问题)

    [题目描述] 潜水员为了潜水要使用特殊的装备.他有一个带2种气体的气缸:一个为氧气,一个为氮气.让潜水员下潜的深度需要各种的数量的氧和氮.潜水员有一定数量的气缸.每个气缸都有重量和气体容量.潜水员为了 ...

  8. 背包问题进阶优雅总结【二维费用+分组+有依赖】

    目录 作者有话说 二维费用的背包问题 状态定义及转移 物品总个数的限制 小结 分组的背包问题 状态定义及转移 小结 有依赖的背包问题(重要) 分析 最后是非常不正经的ending 作者有话说 本篇博文 ...

  9. 二维费用 hdu 2159 FATE(完全背包)HDU OJ 4501 小明系列故事——买年货【DP】

    二维费用的背包问题是指:对于每件物品,具有两种不同的费用:选择这件物品必须同时付出这两种代价:对于每种代价都有一个可付出的最大值(背包容量).问怎样选择物品可以得到最大的价值.设这两种代价分别为代价1 ...

最新文章

  1. linux反汇编暴力破解,逆向教程之-反编译apk暴力去除弹窗和更新提示(三)
  2. 自己动手用gensim 生成句子的word2vec 向量
  3. IDEA 创建Web项目并在Tomcat中部署运行
  4. Android持久化存储(3)SQLite数据库的使用
  5. 133. Clone Graph 克隆图
  6. 远程连接mysql库问题
  7. linux自带mysql启动不_Linux系统自带的MySQL 数据库启动问题
  8. Java 11 将至,不妨了解一下 Oracle JDK 之外的版本
  9. Unity GUI屏幕自适应
  10. PAT甲题题解-1077. Kuchiguse (20)-找相同后缀
  11. python、java、C三种方法打印乘法表
  12. Java构造器(构造方法)与方法区别
  13. 压缩感知 热身实验 OMP算法Python实现(详细代码注释)
  14. html5 游戏 性能测试工具,没事跑个分!几款Chrome内核浏览器性能测试
  15. EndNote X7集成到office word2016(原有EndNote选项卡,却突然消失)
  16. [转载]Win7微软官方正式版原版镜像下载总汇(附win7 OEM KEY密钥)
  17. 计算机中文档的后退键,后退快捷键ctrl加什么
  18. 购物系统 java代码_java购物系统源代码
  19. excel日期相减去除周末_在Excel中突出显示周末日期
  20. Oracle数据库管理系统(安装及入门教学)

热门文章

  1. 政法委社会治安防控平台建设,重点人员联防联控系统开发
  2. Android ConstraintLayout约束布局的使用
  3. java 企业网站源码模版 有前后台 springmvc SSM 生成静态化
  4. SpringBoot优雅退出
  5. 做销售的要背下来!太经典了
  6. 米尔电子 MYC-Y6ULX-V2核心板在机械智能控制器的应用
  7. 验证站点怎么添加网站首页html代码,百度站长平台添加站点通过验证图文详解教程...
  8. 英语中有些单词缩写后面为什么要加个点
  9. 双线路带宽叠加后,指定网站走指定线路!
  10. HTML4.01、XHTML 1.0、HTML5版本变化