HDU - 2159 dp
题目:
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
题解:
因为求最大经验,所以dp数组初始化为0
dp[i][j]表示消耗忍耐度i,杀怪数量小于等于j所获得的最大经验(实现杀怪数量小于等于j在于转移方程,可以模拟一下)
1 for(int i=0; i<k; ++i)
2 {
3 for(int j=b[i]; j<=m; ++j)
4 {
5 for(int x=1; x<=s; ++x)
6 {
7 /*
8 比如枚举到第一个怪a[i]=5,b[i]=5,那么dp[5-m][1]=5;
9 这个时候dp[5-m][2]也被赋值为5了
10 */
11 if(dp[j][x]<dp[j-b[i]][x-1]+a[i])
12 {
13 dp[j][x]=dp[j-b[i]][x-1]+a[i];
14 }
15 }
16 }
17 }
dp转移方程dp[j][x]=max(dp[j][x],dp[j-b[i]][x-1]+a[i]) //a[i]为第i种怪消耗的忍耐度
因为我们最后要求出来最大经验够不够n,所以最后让dp[m][s]与n比较大小就行
代码:
1 #include<stdio.h>
2 #include<string.h>
3 #include<iostream>
4 #include<algorithm>
5 #include<math.h>
6 #include<vector>
7 #include<queue>
8 #include<stack>
9 #include<map>
10 using namespace std;
11 typedef long long ll;
12 const int maxn=110;
13 const int INF=0x3f3f3f3f;
14 const double eps=1e-10;
15 const int mod = 1e9+7;
16 #define mt(A,B) memset(A,B,sizeof(A))
17 #define lson l,m,rt*2
18 #define rson m+1,r,rt*2+1
19 int a[maxn],b[maxn],dp[maxn][maxn];
20 int main()
21 {
22 int n,m,k,s;
23 while(~scanf("%d%d%d%d",&n,&m,&k,&s))
24 {
25 for(int i=0; i<k; ++i)
26 {
27 scanf("%d%d",&a[i],&b[i]);
28 }
29 memset(dp,0,sizeof(dp));
30 for(int i=0; i<k; ++i)
31 {
32 for(int j=b[i]; j<=m; ++j)
33 {
34 for(int x=1; x<=s; ++x)
35 {
36 /*
37 比如枚举到第一个怪a[i]=5,b[i]=5,那么dp[5-m][1]=5;
38 dp[5-m][2]也被赋值为5了
39 */
40 if(dp[j][x]<dp[j-b[i]][x-1]+a[i])
41 {
42 dp[j][x]=dp[j-b[i]][x-1]+a[i];
43 }
44 }
45 }
46 }
47 if(dp[m][s]>=n)
48 {
49 for(int i=0; i<=m; ++i)
50 {
51 if(dp[i][s]>=n)
52 {
53 printf("%d\n",m-i);
54 break;
55 }
56 }
57 }
58 else
59 printf("-1\n");
60 }
61
62 return 0;
63 }
HDU - 2159 dp的更多相关文章
- HDOJ(HDU).2159 FATE (DP 带个数限制的完全背包)
HDOJ(HDU).2159 FATE (DP 带个数限制的完全背包) 题意分析 与普通的完全背包大同小异,区别就在于多了一个个数限制,那么在普通的完全背包的基础上,增加一维,表示个数.同时for循环 ...
- HDU 2159 FATE(二维费用背包)
FATE Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- 背包系列练习及总结(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 ...
- hdu 3016 dp+线段树
Man Down Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...
- HDU 5928 DP 凸包graham
给出点集,和不大于L长的绳子,问能包裹住的最多点数. 考虑每个点都作为左下角的起点跑一遍极角序求凸包,求的过程中用DP记录当前以j为当前末端为结束的的最小长度,其中一维作为背包的是凸包内侧点的数量.也 ...
- HDU 2159 FATE (DP 二维费用背包)
题目链接 题意 : 中文题不详述. 思路 : 二维背包,dp[i][h]表示当前忍耐值为i的情况下,杀了h个怪得到的最大经验值,状态转移方程: dp[i][h] = max(dp[i][h],dp[i ...
- HDU 2159 FATE (dp)
FATE Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submissi ...
- HDU 2159 FATE (dp)
题目链接 Problem Description 最近xhd正在玩一款叫做FATE的游戏,为了得到极品装备,xhd在不停的杀怪做任务.久而久之xhd开始对杀怪产生的厌恶感,但又不得不通过杀怪来升完这最 ...
- HDU - 2159 FATE(二维dp之01背包问题)
题目: 思路: 二维dp,完全背包,状态转移方程dp[i][z] = max(dp[i][z], dp[i-1][z-a[j]]+b[j]),dp[i][z]表示在杀i个怪,消耗z个容忍度的情况下 ...
随机推荐
- .NET 云原生架构师训练营(模块二 基础巩固 敏捷开发)--学习笔记
2.7.1 敏捷开发 敏捷介绍 敏捷的起源 敏捷软件开发宣言 敏捷开发十二原则 生命周期对比 敏捷开发的特点 敏捷的发展 敏捷的核心 敏捷的起源 2001年,17个老头子在一起一边滑雪,一边讨论工作, ...
- docker 安装linux centos 环境
如何在centos7中使用docker创建一个支持ssh连接的容器 以下内容已有现成的,这里借用下这哥们的帖子https://www.cnblogs.com/caidingyu/p/10642158. ...
- 【Linux】history用法
通过history命令可以查看我们在系统中输入过的命令 history命令的一些常用参数 -c 清空内存中命令历史 -d # 删除指定的历史命令,比如 history -d 100 ,就是删除第1 ...
- CTFshow萌新赛-密码学签到
查看密码信息 猜测为base家族 存在"^"符号,所以应该是在base64以上 使用base85解密 成功拿到flag
- kubernetes之为每个命名空间的pod设置默认的requests以及limits
一 为啥需要为命名空间里面添加pod添加默认的requests和limits? 通过前面的学习我们已经知道,如果节点上面的pod没有设置requests和limits,这些容器就会受那些设置了的控制 ...
- mysql+MHA高可用
MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是一套优秀 ...
- Python爬虫学习笔记(一)
概念: 使用代码模拟用户,批量发送网络请求,批量获取数据. 分类: 通用爬虫: 通用爬虫是搜索引擎(Baidu.Google.Yahoo等)"抓取系统"的重要组成部分. 主要目的是 ...
- Vue 3自定义指令开发
本文由葡萄城技术团队原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 什么是指令(directive) 在Angular和Vue中都有Direct ...
- 用CSS制做一个三角形!
用CSS制做一个三角形! <style> .outer { width: 0; height: 0; border-left: 10px solid transparent; border ...
- 关于MongoDB的简单理解(一)--基础篇
一.什么是MongoDB? MongoDB是一个基于分布式文件存储的文档数据库,旨在简化开发和扩展,为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据库和非关系数据库之 ...