题目链接:

1022. 宠物小精灵之收服 - AcWing题库

宠物小精灵是一部讲述小智和他的搭档皮卡丘一起冒险的故事。一天,小智和皮卡丘来到了小精灵狩猎场,里面有很多珍贵的野生宠物小精灵。小智也想收服其中的一些小精灵。然而,野生的小精灵并不那么容易被收服。对于每一个野生小精灵而言,小智可能需要使用很多个精灵球才能收服它,而在收服过程中,野生小精灵也会对皮卡丘造成一定的伤害(从而减少皮卡丘的体力)。当皮卡丘的体力小于等于0时,小智就必须结束狩猎(因为他需要给皮卡丘疗伤),而使得皮卡丘体力小于等于0的野生小精灵也不会被小智收服。当小智的精灵球用完时,狩猎也宣告结束。我们假设小智遇到野生小精灵时有两个选择:收服它,或者离开它。如果小智选择了收服,那么一定会扔出能够收服该小精灵的精灵球,而皮卡丘也一定会受到相应的伤害;如果选择离开它,那么小智不会损失精灵球,皮卡丘也不会损失体力。小智的目标有两个:主要目标是收服尽可能多的野生小精灵;如果可以收服的小精灵数量一样,小智希望皮卡丘受到的伤害越小(剩余体力越大),因为他们还要继续冒险。现在已知小智的精灵球数量和皮卡丘的初始体力,已知每一个小精灵需要的用于收服的精灵球数目和它在被收服过程中会对皮卡丘造成的伤害数目。请问,小智该如何选择收服哪些小精灵以达到他的目标呢?输入格式
输入数据的第一行包含三个整数:N,M,K,分别代表小智的精灵球数量、皮卡丘初始的体力值、野生小精灵的数量。之后的K行,每一行代表一个野生小精灵,包括两个整数:收服该小精灵需要的精灵球的数量,以及收服过程中对皮卡丘造成的伤害。输出格式
输出为一行,包含两个整数:C,R,分别表示最多收服C个小精灵,以及收服C个小精灵时皮卡丘的剩余体力值最多为R。数据范围
0<N≤1000,
0<M≤500,
0<K≤100
输入样例1:
10 100 5
7 10
2 40
2 50
1 20
4 20
输出样例1:
3 30
输入样例2:
10 100 5
8 110
12 10
20 10
5 200
1 110
输出样例2:
0 100

解题思路:

定义状态f[i][j][k] 表示从前 i 个精灵中选择捕捉,捕捉的精灵球不超过 j, 且皮卡丘的体力消耗不超过 k 的 捕捉的精灵的数量:

注意:因为皮卡丘体力为0时不可捕捉,所以枚举的皮卡丘体力不能到0.

#include <cstdio>
#include <cstring>
#include <iostream>using namespace std;const int N = 110;int n, m, k;
int s[N], v[N];
int f[1010][510];int main()
{cin >> n >> m >> k;for (int k = 1; k <= n; k ++ ) cin >> s[k] >> v[k];for (int i = 1; i <= k; i ++ )for (int v1 = n; v1 >= s[i]; v1 -- )for (int v2 = m - 1; v2 >= v[i]; v2 -- )//皮卡丘体力不可为0f[v1][v2] = max(f[v1][v2], f[v1 - s[i]][v2 - v[i]] + 1);cout << f[n][m - 1] << " ";int ans;//从后往前找出捕捉精灵数量和f[n][m - 1]相同且所消耗体力最小的状态。for (int i = m - 1; i - 1 >= 0; i -- ) if (f[n][m - 1] != f[n][i - 1])//找到捕捉数量与f[n][m - 1]不同{ans = i;//则i - 1 + 1即为最小的与f[n][m - 1] 相同的状态。break;}cout << m - ans << endl;//剩余状态的最大值return 0;
}

《信息学奥赛一本通》宠物小精灵之收服相关推荐

  1. 信息学奥赛一本通(基础算法与数据结构-题解汇总目录)

    信息学奥赛一本通(C++版)在线评测系统 基础(二)基础算法   更新中...... 第一章高精度计算 1307[例1.3]高精度乘法 1308[例1.5]高精除 1309[例1.6]回文数(Noip ...

  2. 信息学奥赛一本通(C++版) 第二部分 基础算法 第九章 动态规划

    总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 第二部分 基础算法 第九章 动态规划 第一节 动 ...

  3. 信息学奥赛一本通 (C++)上机练习

    信息学奥赛一本通(C++)上机练习 此书为娃儿的第一本刷题书.娃儿现在四年级 ,希望他能坚持下来.特开贴加油 luogu: disangan223 第一部分 C++语言 第一章 C++语言入门 T10 ...

  4. 信息学奥赛一本通_长乐一中老师演绎“奥赛传奇”

    董永建(右一)在课堂上. 台海网5月14日讯 据福州晚报报道,长乐一中有一位"传奇"老师--15年来,他辅导的学生在全国高中生信息学奥赛中获金牌3人次.银牌3人次.铜牌5人次:在全 ...

  5. 1022. 宠物小精灵之收服

    1022. 宠物小精灵之收服 题意: 现在有n个胶囊,m个生命值,k个怪物,每个怪物需要a[i]个胶囊,且会造成b[i]个伤害后才能捕获,问在活着的前提下,最多捕获多少怪物,在怪物最多的情况下剩余生命 ...

  6. 信息学奥赛一本通 提高篇 第5章 矩阵乘法

    例1 矩阵AXB 信息学奥赛一本通(C++版)在线评测系统 [矩阵乘法]矩阵A×B_Uletay-CSDN博客 矩阵乘法--矩阵A×B_vina的博客-CSDN博客 一本通1641[例 1]矩阵 A× ...

  7. 《信息学奥赛一本通提高篇》第6章 组合数学

    例1 计算系数(NOIP2011提高) 信息学奥赛一本通(C++版)在线评测系统 NOIP2011计算系数_nanhan27的博客-CSDN博客 「NOIP2011」 计算系数 - 组合数_TbYan ...

  8. 《信息学奥赛一本通 提高篇》

    提高篇 第一部分 基础算法 第1章 贪心算法 提高篇 第一部分 基础算法 第1章 贪心算法_青少年趣味编程-CSDN博客 提高篇 第一部分 基础算法 第1章 贪心算法 提高篇 第一部分 基础算法 第1 ...

  9. 信息学奥赛一本通 提高篇 第一部分 基础算法 第2章 二分与三分

    信息学奥赛一本通 提高篇 提高版 第一部分 基础算法 第2章 二分与三分 信息学奥赛一本通 提高篇 提高版 第一部分 基础算法 第2章 二分与三分_mrcrack的博客-CSDN博客_信息学奥赛一本通 ...

最新文章

  1. linux的nvme驱动需要关心的统计项
  2. 初学css list-style属性
  3. 兼容性好的overflow CSS清除浮动一例
  4. 推荐 | 8 个 SpringBoot 精选项目
  5. python中的timeit模块的用法
  6. mimo+matlab代码,mimo-matlab代码
  7. MyBatis+springMVC+easyUI (dataGirl)实现分页
  8. kong组件_使用Kongzue全家桶组件创建项目全攻略(一、引入和沉浸式的那些事儿)...
  9. android 9.0打开wifi,Android9.0 SystemUI 屏蔽打开wifi时不显示4G图标的逻辑
  10. sap不用oracle数据库库,SAP系统安装之Oracle 10g数据库(Win3264)
  11. 柳传志:我是任正非的知音
  12. Mac下使用虚拟专用网络
  13. 大数据相关各职位解析
  14. 2019-2-14SQLserver中拼音查询数据
  15. jquery php 分页插件,JQ分页插件
  16. 邮箱怎么注册流程,如何申请公共邮箱?
  17. BIM用C语言编程,实现BIM技术的三个重要方面是()。A.BIM的建立B.BIM的应用C.BIM的管理D.BIM的粒度E.BIM的概念...
  18. 心情日记——20071109(发泄一下)
  19. 读书笔记-《把时间当朋友》-1
  20. 基于51单片机的智能停车场车位收费系统原理图PCB

热门文章

  1. 康奈尔rtems笔记(1)
  2. Work Like Alibaba系列分享回顾整理(含演讲幻灯片、视频):持续更新中
  3. 严重:init datasource errorcom.mysql.jdbc.exceptions.jdb4.CommunicationsException:Communications link失败
  4. 关于tc作用在入口(ingress)和出口(egress)效果的调研
  5. 网上插画教学哪家质量好,汇总5大插画培训班
  6. 博应用官网揭露不为所知的iPhone手机搜索框使用教程
  7. ubuntu查看本机ip命令
  8. 美团codeM资格赛 优惠券
  9. amd显卡多屏识别了 但是屏幕不亮_最近发布:针对AMD显卡多屏显示设置的完整解决方案。ppt28...
  10. TDengine 在IT运维监控领域的应用