二维背包,dp[i][j]表示忍耐度为i,且还可以杀j个怪时能获得的最大经验值

dp[i][j]=max(dp[i][j],dp[i-r[k]][j-1]+e[k]),r[k]为杀死第k种怪掉的忍耐度,e[k]为第k种怪的经验值

注意方程转移时,我们必须要保证考虑第j个阶段时,我们只放入背包中1个怪,也就是说,必须做01背包,不能做完全背包

一开始先枚举的就,再枚举k,再从小到大枚举i,这样就变成做完全背包了,第k类怪可能在同一阶段被放入多次,如果从大到小枚举i就没问题了

以下我只是用了一种状态转移方程(有的牛人用了好几种):

/*
* 2159.cpp
*
* Created on: 2013年7月29日
* Author: Administrator
*/ #include <iostream> using namespace std; int dp[105][105];
int n,m,K,s,w[105],r[105],e[105]; int main(){ int i , j , k , l; while(cin>>n>>m>>K>>s){ memset(dp,0,sizeof(dp)); for(i=1;i<=K;++i){
cin>>e[i]>>r[i];
} for(j=1;j<=s;++j){//s:怪的个数
for(k=1;k<=K;++k){//K:怪的种类数
/**
* m:所剩的忍耐度
* r[k]:杀掉第k种怪的所掉的忍耐度
* e[k]:杀掉第k种怪的所获得的的经验值
*
*
*/
for(i=m;i>=r[k];--i){
dp[i][j] = max(dp[i][j],dp[i-r[k]][j-1] + e[k]);
}
}
} /**
* 以下循环判断到底要掉多少人啊你读才可以获得所需的经验值
*/
for( i = 0 ; i <= m ; ++i ){
//dp[i][j]:忍耐度为i,还可以杀j个怪的时候所能获得的最大的经验值
if(dp[i][s] >= n){
break;
}
} int ans; if(i>m){//如果所需的忍耐度>所剩的忍耐度
ans = -1;
}else{
//m-i。所剩的忍耐度-所需的忍耐度
ans = m - i;
} cout<<ans<<endl;
} }

hdu 2159的更多相关文章

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

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

  2. HDOJ(HDU).2159 FATE (DP 带个数限制的完全背包)

    HDOJ(HDU).2159 FATE (DP 带个数限制的完全背包) 题意分析 与普通的完全背包大同小异,区别就在于多了一个个数限制,那么在普通的完全背包的基础上,增加一维,表示个数.同时for循环 ...

  3. 背包系列练习及总结(hud 2602 && hdu 2844 Coins && hdu 2159 && poj 1170 Shopping Offers && hdu 3092 Least common multiple && poj 1015 Jury Compromise)

    作为一个oier,以及大学acm党背包是必不可少的一部分.好久没做背包类动规了.久违地练习下-.- dd__engi的背包九讲:http://love-oriented.com/pack/ 鸣谢htt ...

  4. hdu 2159 FATE

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2159 思路:二维完全背包,状态转移方程为: f[j][l]=max(f[j][l],f[j-b[i]] ...

  5. HDU 2159 FATE (二维完全背包

    FATE http://acm.hdu.edu.cn/showproblem.php?pid=2159 Problem Description 最近xhd正在玩一款叫做FATE的游戏,为了得到极品装备 ...

  6. HDU 2159 二维费用背包问题

    一个关于打怪升级的算法问题.. 题意:一个人在玩游戏老是要打怪升级,他愤怒了,现在,还差n经验升级,还有m的耐心度(为零就删游戏不玩了..),有m种怪,有一个最大的杀怪数s(杀超过m只也会删游戏的.. ...

  7. hdu 2159 FATE (二维完全背包)

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=2159 思路: dp[j][k] 代表消耗耐久度j,干掉k个敌人获得的经验值. 状态转移方程为: dp[j] ...

  8. HDU 2159 FATE (二维背包)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2159 解题报告:这题实际上是一个二维的背包问题,也可以由01背包扩展而来,01背包用一维数组,可想而知 ...

  9. HDU 2159 FATE 完全背包

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2159 FATE Time Limit: 2000/1000 MS (Java/Others)Memo ...

随机推荐

  1. 20天android学习

    20多天的实习(事实上,一个人学习的东西)要结束, 其余的都只有读研. 此20许多天,我学到了很多东西, 至android的发展也有一定的了解.之后写这篇文章主要是完成研究可以学得很快再次回升 1.安 ...

  2. linux runtime pm在深入了解的机制

    一:runtime机构简介 何为runtime机制?也就是系统在非睡眠状态,设备在空暇时能够进入runtime suspend状态同一时候不依赖系统wake_lock机制.非空暇时运行runtime  ...

  3. elasticsearch的rest搜索---对于相关度的大牛的文档

    目录: 一.针对这次装B 的解释 二.下载,安装插件elasticsearch-1.7.0   三.索引的mapping 四. 查询 五.对于相关度的大牛的文档 五.对于相关度的大牛的文档 http: ...

  4. HDU4405-Aeroplane chess(可能性DP需求预期)

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

  5. 【高德地图API】从零开始学高德JS API(五)路线规划——驾车|公交|步行

    原文:[高德地图API]从零开始学高德JS API(五)路线规划——驾车|公交|步行 先来看两个问题:路线规划与导航有什么区别?步行导航与驾车导航有什么区别? 回答: 1.路线规划,指的是为用户提供3 ...

  6. Swift语言指南(二)--语言基础之注释和分号

    原文:Swift语言指南(二)--语言基础之注释和分号 注释 通过注释向自己的代码中注入不可执行的文本,作为你自己的笔记或提示.Swift编译器运行时会忽略注释. Swift的注释与C语言极其相似,单 ...

  7. 网站静态化处理—web前端优化—下【终篇】(13)

    网站静态化处理—web前端优化—下[终篇](13) 本篇继续web前端优化的讨论,开始我先讲个我所知道的一个故事,有家大型的企业顺应时代发展的潮流开始投身于互联网行业了,它们为此专门设立了一个事业部, ...

  8. 如何将经纬度利用Google Map API显示C# VS2005 Sample Code

    原文 如何将经纬度利用Google Map API显示C# VS2005 Sample Code 日前写了一篇如何用GPS抓取目前所在,并回传至资料库储存,这篇将会利用这些回报的资料,将它显示在地图上 ...

  9. MVC5+EF6 入门

    MVC5+EF6 入门完整教程九   前一阵子临时有事,这篇文章发布间隔比较长,我们先回顾下之前的内容,每篇文章用一句话总结重点. 文章一 MVC核心概念简介,一个基本MVC项目结构 文章二 通过开发 ...

  10. Android ProgressBar 反向进度条/进度条从右到左走

    近期的项目,有个需求须要使用条状图显示比例,而且右对齐,见下图: 我想到了使用进度条,这样不就不须要在代码动态绘制条状了,省了非常多活. 那么进度条如何从右向左显示呢? 方案一: 将ProgressB ...