AcWing算法提高课-1.3.3宠物小精灵之收服

news2025/6/20 12:12:21

宣传一下算法提高课整理 <—

CSDN个人主页:更好的阅读体验 <—

f4e0159841ab450d861dde9e8fb5ba0d.gif

本题链接(AcWing)

点这里

题目描述

宠物小精灵是一部讲述小智和他的搭档皮卡丘一起冒险的故事。

一天,小智和皮卡丘来到了小精灵狩猎场,里面有很多珍贵的野生宠物小精灵。

小智也想收服其中的一些小精灵。

然而,野生的小精灵并不那么容易被收服。

对于每一个野生小精灵而言,小智可能需要使用很多个精灵球才能收服它,而在收服过程中,野生小精灵也会对皮卡丘造成一定的伤害(从而减少皮卡丘的体力)。

当皮卡丘的体力小于等于0时,小智就必须结束狩猎(因为他需要给皮卡丘疗伤),而使得皮卡丘体力小于等于0的野生小精灵也不会被小智收服。

当小智的精灵球用完时,狩猎也宣告结束。

我们假设小智遇到野生小精灵时有两个选择:收服它,或者离开它。

如果小智选择了收服,那么一定会扔出能够收服该小精灵的精灵球,而皮卡丘也一定会受到相应的伤害;如果选择离开它,那么小智不会损失精灵球,皮卡丘也不会损失体力。

小智的目标有两个:主要目标是收服尽可能多的野生小精灵;如果可以收服的小精灵数量一样,小智希望皮卡丘受到的伤害越小(剩余体力越大),因为他们还要继续冒险。

现在已知小智的精灵球数量和皮卡丘的初始体力,已知每一个小精灵需要的用于收服的精灵球数目和它在被收服过程中会对皮卡丘造成的伤害数目。

请问,小智该如何选择收服哪些小精灵以达到他的目标呢?

输入格式

输入数据的第一行包含三个整数:N,M,K,分别代表小智的精灵球数量、皮卡丘初始的体力值、野生小精灵的数量。

之后的K行,每一行代表一个野生小精灵,包括两个整数:收服该小精灵需要的精灵球的数量,以及收服过程中对皮卡丘造成的伤害。

输出格式

输出为一行,包含两个整数:C,R,分别表示最多收服C个小精灵,以及收服C个小精灵时皮卡丘的剩余体力值最多为R。

数据范围

0 < N ≤ 1000 0 < N \le 1000 0<N1000,
0 < M ≤ 500 0 < M \le 500 0<M500,
0 < K ≤ 100 0 < K \le 100 0<K100

输入样例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

思路

本题为DP问题,可以使用闫氏DP分析法解题。

DP 【二维费用01背包】:

  • 状态表示 f [ i , j , k ] f[i,j,k] f[i,j,k]
    ······集合:在前 i i i 个物品中,第一维费用不超过 j j j, 第二维费用不超过 k k k 的所有方案
    ······属性: max ⁡ \max max
  • 状态计算:
    ······选第 i i i 个物品: f [ i − 1 , j − v 1 , k − v 2 ] + 1 f[i -1,j-v_1,k-v_2]+1 f[i1,jv1,kv2]+1
    ······不选第 i i i 个物品: f [ i − 1 , j , k ] f[i-1,j,k] f[i1,j,k]

算法优化:

同样的,我们可以去掉 f f f 数组的第一维,对代码做等价变形来节省空间复杂度。

时间复杂度: O ( n × m × k ) O(n \times m \times k) O(n×m×k)


A C AC AC C o d e Code Code:

C + + C++ C++

#include <iostream>

using namespace std;

const int N = 1010, M = 510;

int n, V1, V2;
int f[N][M];

int main()
{
	cin >> V1 >> V2 >> n;
	for (int i = 0; i < n; i ++ )
	{
		int v1, v2;
		cin >> v1 >> v2;
		for (int j = V1; j >= v1; j -- )
			for (int k = V2; k >= v2; k -- )
				f[j][k] = max(f[j][k], f[j - v1][k - v2] + 1);
	}
	
	int k = V2 - 1;
	while (k > 0 && f[V1][k - 1] == f[V1][V2 - 1]) k -- ;
	cout << f[V1][V2 - 1] << ' ' << V2 - k << endl;
	
	return 0;
}

228aa7bed3e021faf24cf8560d3e47bb.gif

最后,如果觉得对您有帮助的话,点个赞再走吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/521132.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Stable Diffusion 生成高清图片

Stable Diffusion 生成 8K 高清图片 0. 简介1. 安装 ultimate-upscale-for-automatic1111 插件2. 安装 4x-UltraSharp 模型3. 生成 1 张普通图片4. 生成 1 张高清图片 0. 简介 记录一下使用 Stable Diffusion 生成高清图片使用的插件和过程。 1. 安装 ultimate-upscale-for-a…

Qt推流程序(视频文件/视频流/摄像头/桌面转成流媒体rtmp+hls+webrtc)可在网页和播放器远程观看

一、前言说明 推流直播就是把采集阶段封包好的内容传输到服务器的过程。其实就是将现场的视频信号从手机端&#xff0c;电脑端&#xff0c;摄影机端打包传到服务器的过程。“推流”对网络要求比较高&#xff0c;如果网络不稳定&#xff0c;直播效果就会很差&#xff0c;观众观…

Linux基础篇-将虚拟机的网络配置成静态的

一般都是主机连接服务器&#xff0c;服务器连接主机也是为了上网&#xff0c;通过NAT地址转换就可以。为了防止服务器的IP地址变化&#xff0c;将虚拟机的IP地址设置成静态的。 NAT模式下&#xff0c;为了让主机和虚拟机之间能互相ping通&#xff0c;主机虚拟了一张网卡出来&am…

PicGo+阿里云OSS+Typora图床设置实践及解决方案

你是否遇到想跨平台看markdown文件结果图片加载不出&#xff0c;csdn上传的时候还要手动操作的命苦感&#xff0c;那就接着往下看吧&#xff01; 本文为作者在安装过程中的总结&#xff0c;争取以最简洁的方式帮助大家安装 markdown语法在程序员的生活中运用广泛&#xff0c;…

测试用例、测试流程模型、测试方法详解 超详细分解

1. 测试用例 1.1 测试用例前提 什么是测试用例&#xff1f; 一组由前提条件、测试输入、执行条件以及预期结果等组成&#xff0c;以完成对某个特定需求或者目标测试的数据&#xff0c;体现测试方案、方法、技术和策略的文档。 为什么编写测试用例 &#xff08;1&#xff0…

股票量价关系基础知识1

什么叫成交量 成交量的概念中&#xff0c;包含“成交”、“成交量”和“成交值”三个子概念。 所谓“成交”&#xff0c;就是买卖双方同意所达成的交易行为。“成交”是商业用语&#xff0c;因为股市本事就是一项商业活动&#xff0c;股票市场就是一个大商场&#xff0c;各地证…

每日学术速递5.9

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.Tracking through Containers and Occluders in the Wild(CVPR 2023) 标题&#xff1a;在野外通过容器和遮挡物进行追踪 作者&#xff1a;Basile Van Hoorick, Pavel Tokmakov, Si…

C++数据封装以及定义结构的详细讲解鸭~

名字&#xff1a;阿玥的小东东 博客主页&#xff1a;阿玥的小东东的博客_CSDN博客-python&&c高级知识,过年必备,C/C知识讲解领域博主 目录 定义结构 访问结构成员 结构作为函数参数 指向结构的指针 typedef 关键字 C 数据封装 数据封装的实例 设计策略 C 类 &…

UEngine运行器2.1.0——优化UEngine安装器(Ubuntu)、修复问题

介绍 新版本Deepin/UOS发布后&#xff0c;可以在应用商店安装部分官方已适配的安卓应用&#xff0c;对爱好者来说&#xff0c;不能自己安装APK软件包始终差点意思&#xff0c;本程序可以为Deepin/UOS上的UEngine安卓运行环境安装自定义APK软件包&#xff0c;并能发送安装的APK包…

【GAMES101】作业1学习总结

本系列博客为记录笔者在学习GAMES101课程时遇到的问题与思考。 GAMES101&#xff1a;课程官网GAMES101&#xff1a;B站视频GAMES101&#xff1a;相关文件下载(百度网盘) 一、基础题 通过Assignment1.pdf可以知道基础题的任务就是填充完整两个函数 get_model_matrix()get_pro…

详解c++---array和模板

目录标题 什么是array非类型模板参数函数模板的特化为什么会有特化如何进行特化类模板的特化部分特化模板特化参数的限制 模板的匹配规则模板的分离编译模板的总结 什么是array 在c语言里面使用一个括号就能申请到一段连续的空间&#xff0c;比如说想要申请一段空间用于存储10…

每日学术速递5.8

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.Personalize Segment Anything Model with One Shot 标题&#xff1a;一键个性化细分任何模型 作者&#xff1a;Renrui Zhang, Zhengkai Jiang, Ziyu Guo, Shilin Yan, Junting Pa…

ArcMap创建格网统计图

目录 前言 一、人口数据获取 来源一&#xff1a;中科院地理所公开数据集 来源二&#xff1a;WorldPop数据集 二、人口格网统计步骤 1.创建渔网 2.人口数据处理 2.1 栅格转点 2.2 空间插值——处理人口缺失数据 2.3 空间连接——渔网人口统计 总结 前言 在科研中&am…

南华大学编译原理----词法分析器的设计与实现、语法分析器的设计与实现

下载链接&#xff1a;&#xff08;各位同学不需要充钱哈&#xff0c;这种我也没有收益&#xff0c;去淘宝上面找个代下&#xff0c;大概0.5元就能下载实验报告&#xff0c;用来给同学们参考&#xff0c;下载积分不是我设置的&#xff0c;是网站自己默认的&#xff09; --------…

English Learning - L3 作业打卡 Lesson1 Day1 2023.5.5 周五

English Learning - L3 作业打卡 Lesson1 Day1 2023.5.5 周五 引言&#x1f349;句1: Every people has its own way of saying things , its own special expressions.成分划分弱读连读语调自身问题&#xff1a; &#x1f349;句2: Many everyday American expressions are ba…

股票量价关系基础知识6----图解各阶段量价关系:价涨量平

图解各阶段量价关系&#xff1a;价涨量平 价涨量平是指股价上涨而成交量却变化不大&#xff0c;这可能是场外资金仍在观望&#xff0c;进场做多力量不大。 一、上涨初期的价涨量平 &#xff08;一&#xff09;形态分析 股价触底反弹后小幅上涨&#xff0c;成交量却持平&#x…

【认知提升思维篇】之向上越阶的跳圈思维(学霸的秘籍)

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;普本…

软软件设计师算法上午题概念笔记

N皇后问题 **走迷宫 ** 以上q2不行 因为不能在同一行 这条路所有的都走不通所以需要回溯回溯至上一条路&#xff0c;把上一个皇后位置改变下 重新放皇后三 皇后四不能放所以回溯&#xff0c;发现皇后三也不能放 再往上回溯&#xff0c;发现2也不行那就回溯皇后1 总结&…

网络安全工程师必须面对的三个坎必备十大基础知识!

前言 我一个朋友老赵&#xff0c;老赵在一家大型互联网公司做高级网络安全工程师&#xff0c;从实习生到工程师整整待了六年。去年他们公司为了缩减成本&#xff0c;做了裁员&#xff0c;他也在其中&#xff0c;取而代之的是一个只有三年工作经验的 “新人” … 老赵想着&…

小牟Andorid下面MD5具体实现的思路总结

Android的开发往往需要一定数目demo 从今起MD5一些加密算法提取物 看看是如何实现的 首先&#xff0c;我们必须明确为什么加密&#xff1f; 1 数据安全处理 2 防止数据窃取 3 有效的避免恶意攻击 4 保证文件完整性 5 优化搜索 作为文件&#xff08;数据&#xff09;索引…