理解了这道题 , 我感觉对背包又有了一个更深的认识 ……

HDU  2159

最近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
 
 
题目分析 :
  
  
  在分析出是背包问题后 , 下面要确定的就是维度 , 我要开出几维的数组 , 而确定要开几维就要看这个题目对背包的限制条件 , 并且还要确定在这个背包中我要存的东西 。
  下面就说这个题 , 如果没有耐久度 , 那么它就转换成一个可以用一维背包解决的题 , 遍历所有的怪 , 背包的容量是最多可以杀死的怪 , 背包内存的是经验 ,现在还有一个耐久度 , 那就在多加一维 。
 
给出代码 :
  

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std ; #define Max(a,b) a>b?a:b
#define Min(a,b) a>b?b:a int obtain[105] , reduce[105] ;
int dp[105][105] ; int main ( ) {
int n , m , K , s ;
int a , b , i , j , k ; while ( cin >> n >> m >> K >> s ) {
for ( i = 1 ; i <= K ; i++ ) {
cin >> obtain[i] >> reduce[i] ;
} int sign = 1 ;
memset ( dp , 0 , sizeof(dp) ) ;
for ( i = 1 ; i <= m ; i++ ) {
for ( j = 1 ; j <= K ; j++ ) {
for ( k = 1 ; k <= s ; k++ ) {
if ( reduce[j] <= i )
dp[i][k] = Max ( dp[i][k] , dp[i-reduce[j]][k-1]+obtain[j] ) ;
}
}
if ( dp[i][s] >= n ) {
cout << m-i << endl ;
sign = 0 ;
break ;
}
}
if ( sign ) cout << -1 << endl ;
} return 0 ;
}
 
 

dp-完全背包(题)的更多相关文章

  1. 【DP_树形DP专题】题单总结

    转载自 http://blog.csdn.net/woshi250hua/article/details/7644959#t2 题单:http://vjudge.net/contest/123963# ...

  2. CodeForces 543A - Writing Code DP 完全背包

    有n个程序,这n个程序运作产生m行代码,但是每个程序产生的BUG总和不能超过b, 给出每个程序产生的代码,每行会产生ai个BUG,问在总BUG不超过b的情况下, 我们有几种选择方法思路:看懂了题意之后 ...

  3. dp之背包总结篇

    //新手DP学习中 = =!! 前言:背包问题在dp中可以说是经典,作为一个acmer,到现在才正式学习dp,可以说是比较失败的.我个人比较认同一点,想要做一个比较成功的acmer,dp.搜索.数学必 ...

  4. 树形DP和状压DP和背包DP

    树形DP和状压DP和背包DP 树形\(DP\)和状压\(DP\)虽然在\(NOIp\)中考的不多,但是仍然是一个比较常用的算法,因此学好这两个\(DP\)也是很重要的.而背包\(DP\)虽然以前考的次 ...

  5. HDOJ(HDU).2602 Bone Collector (DP 01背包)

    HDOJ(HDU).2602 Bone Collector (DP 01背包) 题意分析 01背包的裸题 #include <iostream> #include <cstdio&g ...

  6. UVA.357 Let Me Count The Ways (DP 完全背包)

    UVA.357 Let Me Count The Ways (DP 完全背包) 题意分析 与UVA.UVA.674 Coin Change是一模一样的题.需要注意的是,此题的数据量较大,dp数组需要使 ...

  7. UVA.10130 SuperSale (DP 01背包)

    UVA.10130 SuperSale (DP 01背包) 题意分析 现在有一家人去超市购物.每个人都有所能携带的重量上限.超市中的每个商品有其相应的价值和重量,并且有规定,每人每种商品最多购买一个. ...

  8. NOI 2015 寿司晚宴 (状压DP+分组背包)

    题目大意:两个人从2~n中随意取几个数(不取也算作一种方案),被一个人取过的数不能被另一个人再取.两个人合法的取法是,其中一个人取的任何数必须与另一个人取的每一个数都互质,求所有合法的方案数 (数据范 ...

  9. DP之背包经典三例

    0/1背包 HDU2602 01背包(ZeroOnePack): 有N件物品和一个容量为V的背包,每种物品均只有一件.第i件物品的费用是c[i],价值是w[i].求解将哪些物品装入背包可使价值总和最大 ...

  10. USACO Money Systems Dp 01背包

    一道经典的Dp..01背包 定义dp[i] 为需要构造的数字为i 的所有方法数 一开始的时候是这么想的 for(i = 1; i <= N; ++i){ for(j = 1; j <= V ...

随机推荐

  1. 2018-8-10-用-sim-卡加密保护资金

    title author date CreateTime categories 用 sim 卡加密保护资金 lindexi 2018-08-10 19:16:52 +0800 2018-2-13 17 ...

  2. 2019-8-6-在-Gitlab-开启-MatterMost-机器人

    title author date CreateTime categories 在 Gitlab 开启 MatterMost 机器人 lindexi 2019-8-6 19:42:1 +0800 20 ...

  3. linux自旋锁函数

    我们已经看到 2 个函数, spin_lock 和 spin_unlock, 可以操作自旋锁. 有其他几个函 数, 然而, 有类似的名子和用途. 我们现在会展示全套. 这个讨论将带我们到一个我们无 法 ...

  4. node第一个参数必须是err

    Node.js 约定回调函数第一个参数必须是错误对象err: 问题:Node.js约定回调函数第一个参数必须是错误对象err,如果没有错误该参数就是null 原因:异步执行分成两段,在两段之间抛出异常 ...

  5. vue-learning:20 - js - 区别:filters / data / computed / watch / methods

    区别:filters / data / computed / watch / methods 在配置对象options中,filters/data/computed/watch/methods的每一项 ...

  6. 第二阶段:2.商业需求分析及BRD:4.产品需求分析总结

    产品的需求筛选 战略定位要考虑公司的战略问题.产品定位要分阶段,各个阶段的需求不同. 其实现在需求分析跟筛选都是非常快的. 不把需要当成需求,意思就是不要用户说需要什么就是什么,用户需要引导. 先分类 ...

  7. 变量 (Variable)

    Tensor不能反向传播. variable可以反向传播. 什么是 Variable import torch from torch.autograd import Variable # torch ...

  8. python知识点总结02(不定时更新)

    请用至少两种方式实现m与n值交换m=10,n=5 # 方式一 temp = 0 m = 10 n = 5 print(f'方式一交换前,m:{},n:{}') temp = m m = n n = t ...

  9. java_学生成绩管理系统

    //信1805-2 20183670 王云鹏 package student; import java.util.Scanner; public class ScoreManagement { sta ...

  10. 用Tasker实现收到Android手机短信自动转发到邮箱

    发送短信到邮箱的原理与 <用Tasker实现收到Android手机短信自动转发到邮箱>有些类似.  发送短信到邮箱是利用Ifttt这个服务将短信转发到邮箱中.Ifttt服务的可扩展性很强, ...