栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

T1292 宠物小精灵

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

T1292 宠物小精灵

前言

师姐问了我一个二维背包问题, 傻眼了,之前没写过, 好在参考了老哥代码 T1292:宠物小精灵之收服 后给写出来了。作者使用c, 我使用cpp, 并且使用了STL, 更加省空间。
题目大家看那个作者的链接吧。


代码

struct 不熟悉的同学可看: cpp极简入门——结构体_(7)
STL 不熟悉的同学可看: STL常用操作

#include 
#include 
using namespace std;

struct Pet{
	int ball; // 精灵球 
	int hp;  // 体力 
};


 int main() {
 	unordered_map pet;
 	unordered_map> dp;
 	int n, m, t; // 小智的精灵球数量n 皮卡丘初始的体力值m
	// 野生小精灵的数量t
 	cin >> n >> m >> t;
 	
 	for (int i = 1;i <= t; i++)
 		cin >> pet[i].ball >> pet[i].hp;
 	
 	for (int i = 1; i <= t; i++) { // 遍历每一只精灵 
 		for (int j = n; j >= pet[i].ball; j--) {
 			for (int k = m; k >= pet[i].hp; k--)
 				dp[j][k] = max(dp[j][k], dp[j - pet[i].ball][k - pet[i].hp] + 1);
		}
	}
	
	bool flag = true; 
	// 看看哪里可以消耗最少的皮卡丘体力
	for (int i = 1; i < m; i++) { // i <= m错了吧; 皮卡丘小于0不能捕捉 
		if (dp[n][i] == dp[n][m]) {
			cout << dp[n][i] << " " << m - i << endl;
			flag = false;
			break;
		}
	}
	
	// 没法捕获 
	if (flag)
		cout << 0 << " " << m << endl;
 }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/779475.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号