FATE

                                                                      Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

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
先求出不超过他的忍耐度杀完s只怪时能够得到的经验值, 如果能升完最后一级,再求用去多少忍耐度就能够升级,最后用他的忍耐度减去需要消耗的忍耐度即可 /*忍耐度当做体积,经验值当做价值,怪的只数当做物品数量*/
状态转移方程:f[i][j]=max{f[i][j],f[i-b][j-1]+a} i表示忍耐度,j表示杀怪数
代码:
/*忍耐度当做体积,经验值当做价值,怪的只数当做物品数量*/
#include<stdio.h>
#include<string.h>
int dp[105][105],a[105],b[105];
int max(int a,int b)
{return a>b?a:b;
}
int main()
{int i,j,k,n,m,K,s;while(scanf("%d%d%d%d",&n,&m,&K,&s)!=EOF){for(i=0;i<K;i++)scanf("%d%d",&a[i],&b[i]);memset(dp,0,sizeof(dp));for(i=0;i<K;i++) //控制第几组for(j=b[i];j<=m;j++) //控制忍耐度for(k=1;k<=s;k++)  //控制杀怪只数dp[j][k]=max(dp[j][k],dp[j-b[i]][k-1]+a[i]);//不杀这只怪之前的经验值加上杀了之后的经验值,所以k-1if(dp[m][s]>=n){for(i=0;i<=m;i++) //寻找能够升级所消耗的最小忍耐度,只用找消耗相同忍耐度的情况下,令杀怪数量最多,if(dp[i][s]>=n)  //dp[i][s]是消耗i忍耐度的情况下,获得的最大经验值{printf("%d\n",m-i); //求剩余的忍耐度break;}}elseprintf("-1\n");  //不能升级}return 0;
}

hdu 2159 FATE 二维背包相关推荐

  1. HDU-2159 FATE 二维背包

    FATE Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  2. HDU-2159 FATE 二维背包

    这题是一个二维背包的题目,刚开始并没有那样去做,只开了一维的空间来存储状态,结果很多的数据都没有跑过去.其实这题这样来问的话可能就明了很多了,求在指定的容忍值和指定的杀怪数下,求最大能够得到了经验数, ...

  3. FATE HDU - 2159(二维完全背包)

    限制条件: 1.忍耐度 m   2.杀怪个数 s 构造: dp[m][s]   得到的经验值 Time limit       1000 ms Memory limit       32768 kB ...

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

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

  5. HDU2159 FATE(二维背包、带限制条件的背包问题)

    题目传送门 题意很明显,就不细说了 我们这里可以把剩下的忍耐度看作背包容量,然后价值就是杀了怪所得的经验 用第二维表示杀了q只怪,这样就能用dp[j][q]表示已消耗j点忍耐度,杀了q只怪时的经验值 ...

  6. HDU 2159 FATE (DP 二维费用背包)

    题目链接 题意 : 中文题不详述. 思路 : 二维背包,dp[i][h]表示当前忍耐值为i的情况下,杀了h个怪得到的最大经验值,状态转移方程: dp[i][h] = max(dp[i][h],dp[i ...

  7. 杭电2159-FATE (二维背包运用+详细解释)

    FATE Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  8. c++ 动态规划-二维背包 and 潜水员问题

    动态规划 - 二维背包 1.普通二维(费用)背包 01背包问题:给定 n 种物品和一个重量(容量)(限定条件)为 w 的背包,物品 i 的重量是 wi,其价值为 vi.(每种物品只有一个)问:如何选择 ...

  9. HDU 2159 FATE【二维完全背包】

    题目链接:https://vjudge.net/problem/HDU-2159 FATE                                                       ...

最新文章

  1. 上如何刻字_如何用简单的方法在零件表面刻字:这里就有你想要的答案
  2. 表格布局实践中经验的一些总结
  3. redis集群扩容和缩容_Full-Stack-Notes
  4. Android AsyncTask简单用法
  5. OpenCASCADE绘制测试线束:拓扑命令之3D模型周期性
  6. 利用js弹出select下拉选中option的内容
  7. 1500Vdc的光伏系统距离大规模应用还有多远?
  8. select下拉框怎么去掉空白_行业词库:网站长尾关键词优化怎么做呢?
  9. 激活策略 查询_苹果手机未激活也可能不是原装货,激活过的手机到底能不能买?...
  10. nodejs 批处理执行 app.js
  11. python内置函数open_Python学习教程:Python内置函数大总结(下篇)
  12. CSS-fishc学习笔记
  13. 数据库 课程设计 仓库管理系统
  14. SIM800L上传数据到OneNET(HTTP)
  15. cuda必须装在c盘吗_怎样把C盘的所有文件移到D盘或E盘里去?
  16. Vista硬盘安装详细图解
  17. NLP与对比学习的巧妙融合,简单暴力效果显著!
  18. python前端学习之js
  19. Linux网络容灾,一个简单的两个Linux之间的容灾备份的Demo
  20. 以太坊智能合约项目开发——Web3.py库安装及错误解决方案

热门文章

  1. Harbor管理docker镜像(1.7.5版本-主从复制)
  2. software on macbook pro
  3. counterfactual
  4. initial model for Agile Development Organization: Relationship Graph
  5. 年轻人对于“绰号”的认识
  6. 我的一个特点:数据处理能力还可以,但是数据规律记忆能力有限
  7. 神奇的bibtex插件:你的论文文献小助手
  8. 创业要拿出独门秘籍才行
  9. OpenGL3.x,4.x中使用FreeImage显示图片的BUG-黑色,或颜色分量顺序错乱
  10. 助力深度学习!阿里开源可插拔 GPU 共享调度工具