二维背包,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. Blocks and Variables

    Blocks and Variables https://developer.apple.com/library/ios/documentation/cocoa/conceptual/Blocks/A ...

  2. TableLayout中stretchColumns、shrinkColumns的使用方法

    android:stretchColumns="1" android:shrinkColumns="1"这两个属性是TableLayout所特有的,也是这两个属 ...

  3. clearfix:after 清除css浮动

    在写HTML代码的时候,发现在Firefox等符合W3C标准的浏览器中,如果有一个DIV作为外部容器,内部的DIV如果设置了float样式,则外部的容器DIV因为内部没有clear,导致不能被撑开.看 ...

  4. Python 得到Twitter所有用户friends和followers

    CODE: #!/usr/bin/python # -*- coding: utf-8 -*- ''' Created on 2014-7-29 @author: guaguastd @name: f ...

  5. js调用wcf 的SOA

    jquery 调用wcf 的SOA架构,将三层架构运用到SOA的架构中来 经过前面3天的学习,我想大家应该对SOA的架构有了初步的了解,其实 SOA与三层架构并不冲突,而是三层架构的升级版. 来看下传 ...

  6. 引擎介绍 - REngine

    引擎介绍 - REngine 规则引擎 规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策.接受数据输入,解释业务规 ...

  7. IOS开发-Swift新语言初见

    Safe Swift pairs increased type safety with type inference, restricts direct access to pointers, and ...

  8. Iframe父页面与子页面之间的调用

    原文:Iframe父页面与子页面之间的调用 Iframe父页面与子页面之间的调用 专业词语解释如下:     Iframe:iframe元素是文档中的文档.     window对象: 浏览器会在其打 ...

  9. Android Notification通知详细解释

    Android Notification通知具体解释  Notification: (一).简单介绍:         显示在手机状态栏的通知. Notification所代表的是一种具有全局效果的通 ...

  10. Struts2_2_第一Struts2应用

    web.xml文件的配置与1同样. 1)HelloWorld类的代码: public class HelloWorldAction { private String message; public S ...