洛谷B4071 [GESP202412 五级] 武器强化

news2025/1/7 9:50:46

题目传送门!

思路

我愿称之为gesp5史上最难想。。。

做法:贪心+模拟(or二分)


对于贪心算法来说,最最最无法理解的地方:选择价格最低的配件来转换,还是选择拥有最多配件的其他武器来转换。

选低价的好处是成本低,这个不用说。但选择目前排名最高武器的配件,好处很多,一个是增强自己,还有就是打击对手。

看似这里应该做一个动态规划

但是复杂度实在是太高

所以就想到了应该用贪心的思路来做。

回顾贪心题的基本做法

  1. 把问题分解为很多步
  2. 每步选择一个局部最优的方案
  3. 把这些步骤合并期望得到全局最优解

分解是最关键的!

正解的做法是进行多轮的游戏:在每轮游戏中使用不一样的策略,最后在所有策略中找到一个最好的。

步骤,逻辑

重点来喽!多轮游戏怎么设计

这里用了一种反向思维,从结果倒推过程。

那么 1 号武器赢的时候到底有多少配件?它是怎么赢的?

首先, 1 号武器必须超过所有其他武器,注意,必须是所有!

已知配件总数是m,所以 1 号最多占 m/2+1 个配件就绝对可以胜利。

最少也必须占有 1 个配件才可能胜利(但是其他都必须是 0 )。。

然后再来看它是怎么赢的。

假设 1 号武器赢的时候拥有 x 个配件,那么所有武器最多保留 x−1 个配件,超过这个数量的最便宜的那部分配件肯定是被转换了!

这个费用是必须付的,不管贵不贵,因为真的对于取胜很重要。

如果 1 号武器转换了这些配件还不够 x 个的话,就可以自由地从剩下的配件中进行最低价格选择。

所以这样就可以解决上面的问题!

做法:枚举所有赢时的配件数量,然后用这个逻辑去倒推计算实际的费用。

最后选一个费用最低的方案。

这样就同时得到了费用最低的方案和 1 号武器配件数。

一些复盘启发。。

如果已经明确了取胜的数量,那就是一个纯粹的贪心。

但实际上来看,找出最优解靠的不是贪心,而是枚举!

那么数量特别大的时候,还可以用上二分!

贪心关注的是局部,局部最优解导致全局最优解。

重点:看似动态规划,实则贪心+枚举(or二分)

最后附上一个小警告:最小值要达到1e18,还有这个题优先队列做40pts

代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n, m;
vector<int> a[1010];
ll all(int aim)
{
    int cnt = a[1].size();
    ll res = 0;
    vector<int> tmp;  
    for (int i = 2; i<=n; i++)
	{
        int buy = max((int)a[i].size() - aim + 1, 0);
        for (int j = 0; j < buy; j++)
		{
            res += a[i][j];
        }
        cnt += buy;
        for (int j = buy; j < a[i].size(); j++)
		{
            tmp.push_back(a[i][j]);
        }
    }
    sort(tmp.begin(), tmp.end()); 
    for (int i = 0; i < aim - cnt; i++)
	{
        res += tmp[i];
    }
    return res;
}
int main()
{
    cin >> n >> m;
    for (int i = 1; i <=m; i++)
	{
        int p, c;
        cin >> p >> c;
        a[p].push_back(c);
    }
    for (int i = 1; i <=n; i++)
	{
        sort(a[i].begin(), a[i].end());
    }
    ll ans = 1e18;
    for (int i = 1; i <= m/2+1; i++)
	{
    	ll x= all(i);
		ans = min(ans, x);
	}
	cout << ans;
	return 0;
}

完结撒

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

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

相关文章

SQL Server导出和导入可选的数据库表和数据,以sql脚本形式

一、导出 1. 打开SQL Server Management Studio&#xff0c;在需要导出表的数据库上单击右键 → 任务 → 生成脚本 2. 在生成脚本的窗口中单击进入下一步 3. 如果只需要导出部分表&#xff0c;则选择第二项**“选择具体的数据库对象(Select specific database objects)”**&am…

基于SpringBoot在线竞拍平台系统功能实现十五

一、前言介绍&#xff1a; 1.1 项目摘要 随着网络技术的飞速发展和电子商务的普及&#xff0c;竞拍系统作为一种新型的在线交易方式&#xff0c;已经逐渐深入到人们的日常生活中。传统的拍卖活动需要耗费大量的人力、物力和时间&#xff0c;从组织拍卖、宣传、报名、竞拍到成…

Android Camera压力测试工具

背景描述&#xff1a; 随着系统的复杂化和业务的积累&#xff0c;日常的功能性测试已不足以满足我们对Android Camera相机系统的测试需求。为了确保Android Camera系统在高负载和多任务情况下的稳定性和性能优化&#xff0c;需要对Android Camera应用进行全面的压测。 对于压…

配置嵌入式服务器

一、如何定制和修改Servlet容器的相关配置 修改和server有关的配置&#xff08;ServerProperties&#xff09; server.port8081 server.context‐path/tx server.tomcat.uri-encodingUTF-8二、注册servlet三个组件【Servlet、Filter、Listener】 由于SpringBoot默认是以jar包…

GPIO、RCC库函数

void GPIO_DeInit(GPIO_TypeDef* GPIOx); void GPIO_AFIODeInit(void); void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct); void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct); //输出 读 uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx,…

3D高斯点云CUDA版本数据制作与demo运行

0. 简介 关于UCloud(优刻得)旗下的compshare算力共享平台 UCloud(优刻得)是中国知名的中立云计算服务商&#xff0c;科创板上市&#xff0c;中国云计算第一股。 Compshare GPU算力平台隶属于UCloud&#xff0c;专注于提供高性价4090算力资源&#xff0c;配备独立IP&#xff0c;…

框架模块说明 #09 日志模块_01

背景 日志模块是系统的重要组成部分&#xff0c;主要负责记录系统运行状态和定位错误问题的功能。通常&#xff0c;日志分为系统日志、操作日志和安全日志三类。虽然分布式数据平台是当前微服务架构中的重要部分&#xff0c;但本文的重点并不在此&#xff0c;而是聚焦于自定义…

conda指定路径安装虚拟python环境

DataBall 助力快速掌握数据集的信息和使用方式&#xff0c;会员享有 百种数据集&#xff0c;持续增加中。 需要更多数据资源和技术解决方案&#xff0c;知识星球&#xff1a; “DataBall - X 数据球(free)” -------------------------------------------------------------…

aws(学习笔记第二十二课) 复杂的lambda应用程序(python zip打包)

aws(学习笔记第二十二课) 开发复杂的lambda应用程序(python的zip包) 学习内容&#xff1a; 练习使用CloudShell开发复杂lambda应用程序(python) 1. 练习使用CloudShell CloudShell使用背景 复杂的python的lambda程序会有许多依赖的包&#xff0c;如果不提前准备好这些python的…

driftingblues6靶场攻略

首先 打开kali&#xff0c;扫描主机 地址是192.168.111.143 访问网站 主页源码看一看&#xff0c;没啥用 老套路&#xff0c; 用nmap扫描一下开放端口 用dirsearch扫描一下目录 如果说扫描不到&#xff0c;那就可能是字典不行&#xff0c;换工具就完了 nmap -sV 192.168.…

【顶刊TPAMI 2025】多头编码(MHE)之Part 6:极限分类无需预处理

目录 1 标签分解方法的消融研究2 标签分解对泛化的影响3 讨论4 结论 论文&#xff1a;Multi-Head Encoding for Extreme Label Classification 作者&#xff1a;Daojun Liang, Haixia Zhang, Dongfeng Yuan and Minggao Zhang 单位&#xff1a;山东大学 代码&#xff1a;https:…

vue视频录制 限制大小,限制时长

<template><div style"height: 100vh;background: #000;"><span style"color: #fff;font-size: 18px;">切换数量&#xff1a;{{ devices.length }}</span><video ref"video" autoplay muted playsinline></vid…

毕业项目推荐:基于yolov8/yolov5的行人摔倒检测识别系统(python+卷积神经网络)

文章目录 概要一、整体资源介绍技术要点功能展示&#xff1a;功能1 支持单张图片识别功能2 支持遍历文件夹识别功能3 支持识别视频文件功能4 支持摄像头识别功能5 支持结果文件导出&#xff08;xls格式&#xff09;功能6 支持切换检测到的目标查看 二、数据集三、算法介绍1. YO…

高等数学学习笔记 ☞ 无穷小比较与等价无穷小替换

1. 无穷小比较 1. 本质&#xff1a;就是函数的极限趋于0时的速度&#xff0c;谁快谁慢的问题。 2. 定义&#xff1a;若是在同一自变量的变化过程中的无穷小&#xff0c;且&#xff0c;则&#xff1a; ①&#xff1a;若&#xff0c;则称是比的高阶无穷小&#xff0c;记作&…

基于Spring Boot的智能笔记的开发与应用

一、项目背景与意义 智能笔记系统旨在为用户提供便捷、高效的笔记记录与管理服务。通过智能化的功能&#xff0c;如自动分类、标签管理、全文搜索等&#xff0c;用户可以更加轻松地管理和查找自己的笔记。同时&#xff0c;基于Spring Boot的开发使得系统具有高度的可扩展性和可…

word中插入zotero引用

1、参考文献末尾没有文献&#xff1f; 在文献条目要显示的地方点击“refresh” 2、参考文献条目没有悬挂缩进&#xff1f; 把“书目”添加到样式库中&#xff0c;修改样式为悬挂缩进1.5字符 3、交叉引用&#xff1f; 宏 新建一个宏 粘贴下面代码 Public Sub ZoteroLinkCita…

简历_专业技能_熟悉Redis常用数据结构及其操作命令

系列博客目录 文章目录 系列博客目录1.Redis通用命令2.String类型3.Hash类型4.List类型5.Set类型6.Sorted类型7.StringRedisTemplate 1.Redis通用命令 通用指令是部分数据类型的&#xff0c;都可以使用的指令&#xff0c;常见的有&#xff1a; KEYS&#xff1a;查看符合模板的…

快速将索尼手机联系人导出为 HTML 文件

我想将 Sony Xperia 手机上的联系人导出到计算机上进行备份&#xff0c;并在需要时进行编辑。这可以做到吗&#xff1f;如何做到&#xff1f;作为助手我需要下载什么工具吗&#xff1f; 当您的 Android 手机上存储了如此多的重要联系人&#xff0c;而您又不想丢失它们时&#…

爬虫案例-爬取某度文档

文章目录 1、第三方库的安装和pytesseract安装2、爬取某度文档的代码3、效果图 1、第三方库的安装和pytesseract安装 #以下是安装http请求的第三方库 pip install requests #以下是安装处理文档的第三方库 pip install python-docx #以下是安装处理图片的第三方库 pip install…

《塑战核心》V1.0.0.9952官方中文版

体验打击感满分的近距离战斗。击败蜂拥而至的敌人&#xff0c;每次击杀都会让你变得更强。 《塑战核心》官方中文版https://pan.xunlei.com/s/VODW7effpagQN1JU0UpBQQ5uA1?pwdmr8g#