【2024.2.4练习】国王游戏

news2024/9/18 18:08:18

题目描述


题目思路

涉及排列组合求最优解问题,数据大考虑是否满足某种贪心策略。

假设不除以右手的数字,那么获得金币数量最多的显然为最后一个人。左手数字最大的应排在最后一位。在右手有数字的情况下,不妨也尝试从最后一个人开始排。

假设最后一个为第n个人(国王为第0个),他左手和右手上的数字分别为L_nR_n,他获得的金币为G_n。则:

①  G_n= L_0\times \frac{L_1\times L_2\times ...\times L_{n-1}}{R_n}

假设将他和第一个大臣交换位置,则最后一个获得的金币变成:
②  {G_n}' = L_0\times \frac{L_n\times L_2\times ...\times L_{n-1}}{R_1}

将①式与②式相除,得:
③  \frac{G_n}{G_n{}'} =\frac{L_1\times R_1}{L_n\times R_n}

要使最后一个人获得的金币数尽可能少,应使G_n\leq G_n{}',则L_nR_n应尽可能大。

现在我们已经知道了使最后一个获得金币最少的策略。接下来需证明所有人都用这种策略就能使最大金币数最小。假设最后一个人可能获得金币的数量有k种,分别为A_1,A_2,A_3...A_{k},分别对应第k个人在最后一个位置上时获得金币数。倒数第二个人可能获得金币的数量有k-1种,分别为B_1,B_2,B_3...B_{k-1},因为已经有一个人排到了最后一个位置上。

易证:A_i> B_i

因此,每次应选取A_i中最小的那一个,这样剩余的A_i在转化成B_i时值都会减小,按此策略选择出的最大金币数也是最小的。

还有一个细节,当两个L_nR_n的值相同的时候应先排哪个?
L_iR_i=L_jR_j,设先排L_iR_i,则:

G_i= L_0\times \frac{L_1\times L_2\times ...\times L_{j-1}\times L_{j}}{R_i}

G_j= L_0\times \frac{L_1\times L_2\times ...\times L_{j-1}}{R_j}

两式相除得:\frac{G_i}{G_j} =\frac{L_j\times R_j}{R_i}=L_i

可以看出后排获得得金币数G_j=G_i/L_i,为了使后一个获得的金币数尽可能少,故两个L_nR_n的值相同的时候应先排L_n更高的。


我的代码

为了求ab的最大值,需要在执行贪心策略的过程中使用排序算法,由于排序中涉及两个变量,故采用map容器排序,时间复杂度为O(nlogn)。由于部分数据范围需要高精度算法。高精度部分尚未实现

#include <iostream>
#include <algorithm>
#include <map>
#include <set>
using namespace std;
typedef multiset<int> s;
typedef pair<int, s> p;
map<int, s> m;
map<int, s>::iterator it;
multiset<int>::iterator it2;
int a[1001];
int b[1001];
int main() {
	int n;
	//快速排序
	cin >> n;
	cin >> a[0] >> b[0];
	for (int i = 1; i <= n; i++)
	{
		s S;
		cin >> a[i] >> b[i];
		S.insert(a[i]);
		//向map容器插入数据
		pair<map<int, s>::iterator, bool> flag = m.insert(p(a[i] * b[i], S));
		//检查元素是否冲突(ab相等)
		if (!flag.second) {
			s S2((*flag.first).second);
			S2.insert(a[i]);
			m.erase(flag.first);
			m.insert(p(a[i] * b[i], S2));
		}
	}
	//执行贪心
	long long mult = a[0];
	long long ans = 0;
	for (it = m.begin(); it != m.end(); it++) {
		s S((*it).second);
		for (it2 = S.begin(); it2 != S.end(); it2++) {
			long long L = *it2;
			//cout << L;
			long long R = (*it).first / L;
			//cout << R;
			ans = max(ans, (mult / R));
			mult = mult * L;
		}
	}
	cout << ans<< endl;
	return 0;
}

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

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

相关文章

Python---Pycharm安装各种库(第三方库)

一、前言 Pycharm中&#xff0c;通常需要安装很多第三方库&#xff0c;才可以使用相应的拓展功能&#xff0c;这篇文档给你介绍Pycharm中的常用库&#xff0c;以及安装的两种方法!二、Pycharm常用库的介绍 Pycharm是一款非常流行的Python集成开发环境&#xff08;IDE&#xff…

VSCODE使用ssh远程连接时启动服务器失败问题

错误情况 ping服务器的ip可通并且使用terminal可以ssh连接到远程服务器。但使用vscode的remote-ssh时&#xff0c;在「输出」栏出现了一直报 Waiting for server log… 的情况&#xff01; 解决方法一 重置服务器设置&#xff0c;包括以下手段&#xff1a; 1.清理服务器端的…

RV1126 ext4 img格式的文件系统制作

&#xff08;1&#xff09;制作镜像文件,用dd工具创建12G大小空的镜像文件 dd if/dev/zero ofmedia.img bs512 count25165824#bs512表示每块读写512字节的数据#count25165824表示拷贝25165824次 &#xff08;2&#xff09;可以查看制作的镜像 hexdump -C media.img ll media…

浅谈Zookeeper及windows下详细安装步骤

1. Zookeeper介绍 1.1 分布式系统面临的问题 分布式系统是一个硬件或软件组件分布在不同的网络计算机上&#xff0c;彼此之间仅仅通过消息传递进行通信和协调的系统。 面临的问题&#xff1a;系统每个节点之间信息同步及共享 以一个小团队为例,面临的问题 通过网络进行信息…

2024契约锁新春年会|拓百城·聚万力·共价值

契约锁全国各地的伙伴齐聚上海前滩香格里拉&#xff0c;携手开启“2024联结伙伴 深耕百城 聚焦大客户”的新征程&#xff01; 年会精彩看点回顾2023持续向上发展&#xff0c;感恩客户伙伴的支持&#xff01; 这一年&#xff0c;电子签章成为组织数字化建设中的刚性需求&#…

idea常用设置

1、内存优化 根据自己电脑本身的内存&#xff0c;对idea安装包里bin目录下的idea64.exe.vmoptions文件进行修改 -server -Xms256m -Xmx2048m -XX:MaxPermSize1024m -XX:ReservedCodeCacheSize256m -ea -Dsun.io.useCanonCachesfalse -Djava.Net.preferIPv4Stacktrue -Djsse.e…

nginx日志格式脚本

​ Nginx日志主要分为两种&#xff1a; access_log&#xff08;访问日志&#xff09;&#xff1a;记录客户端请求的信息&#xff0c;可以指定 log_format。 error_log&#xff08;错误日志&#xff09;&#xff1a;记录应用程序问题等信息&#xff0c;不可以指定log_format …

【数据结构 09】哈希

哈希算法&#xff1a;哈希也叫散列、映射&#xff0c;将任意长度的输入通过散列运算转化为固定长度的输出&#xff0c;该输出就是哈希值&#xff08;散列值&#xff09;。 哈希映射是一种压缩映射&#xff0c;通常情况下&#xff0c;散列值的空间远小于输入值的空间。 哈希运…

Redis核心技术与实战【学习笔记】 - 22.浅谈Redis的ACID相关知识

概述 事务是数据库的一个重要功能。所谓的事务&#xff0c;就是指对数据进行读写的一系列操作。事务在执行时&#xff0c;会提供专门的属性保证&#xff0c;包括原子性&#xff08;Atomicity&#xff09;、一致性&#xff08;Consistency&#xff09;、隔离性&#xff08;Isol…

python脚本将照片按时间线整理

说明&#xff1a;有一次自己瞎折腾&#xff0c;然后把服务器相册搞崩了&#xff0c;后来做了备份同步给找了回来&#xff0c;但是相册的时间线全乱了&#xff0c;看起来非常难受。所以就想通过文件夹的形式把照片重新分类&#xff0c;分类后的结构如下(红色字体为文件夹)&#…

西瓜书学习笔记——核化线性降维(公式推导+举例应用)

文章目录 算法介绍实验分析 算法介绍 核化线性降维是一种使用核方法&#xff08;Kernel Methods&#xff09;来进行降维的技术。在传统的线性降维方法中&#xff0c;例如主成分分析&#xff08;PCA&#xff09;和线性判别分析&#xff08;LDA&#xff09;&#xff0c;数据被映…

React实例之完善布局菜单(三)

接着上篇的内容继续。规划界面布局。界面分为三个部分&#xff0c;左边为菜单部分&#xff0c;右边上部有个 80 px 高度左右的功能区&#xff0c;下面是主内容区。 依据这个设计&#xff0c;我们进行下面的步骤&#xff1a; 在 SMenu项目中创建一个目录&#xff1a; SLayout, …

解放网工双手-SNMP如何做好运维辅助?

1. SNMP为什么被誉为“网管神器”&#xff1f; 2. SNMP不同版本有何区别&#xff1f; 3. SNMP有哪些问题及Telemetry有何优势&#xff1f; ---- SNMP ----- 简单网络管理协议 U2000&#xff1a;传输设备管理 企业&#xff0c;银行 esight&#xff1a;华为 iMaster NCE-Camp…

【webpack】技巧使用

webpack和TypeScript 安装webpack相关内容安装TS相关内容配置初始化数据初始化运行展示和目录展示报错解决&#xff08;缺失文件配置&#xff09; 安装前端必备神奇lodash测试一下entry配置index.html模板配置修改打包出来的index.html的titleinject注入chunks 属性多页面配置 …

从 20 多套 MySQL 到 1 套 TiDB丨骏伯网络综合运营管理平台应用实践

原文来源&#xff1a; https://tidb.net/blog/a38c72a4 本文作者&#xff1a;骏伯网络 唐帆&#xff0c;PingCAP 贺美存 骏伯网络简介 广州骏伯网络是一家以数据驱动的科技公司&#xff0c;聚焦移动互联网营销服务&#xff0c;坚持以客户为中心&#xff0c;深耕 APP、运营…

大数据学习之Redis,十大数据类型的具体应用(四)

3.8 Redis基数统计&#xff08;HyperLogLog&#xff09; 需求 统计某个网站的UV、统计某个文章的UV 什么是UV unique Visitor &#xff0c;独立访客&#xff0c;一般理解为客户端IP 大规模的防止作弊&#xff0c;需要去重复统计独立访客 比如IP同样就认为是同一个客户 需要去…

sqli.labs靶场(29到40关)

29、第二十九关 id1 id1 尝试发现是单引号闭合&#xff0c; -1 union select 1,2,3-- -1 union select 1,2,database()-- -1 union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schemasecurity)-- -1 union select 1,2,(select…

国内最全的Spring Boot系列之七

• 阿里巴巴前高级研发工程师 • 三家千万级互联网企业技术顾问 • MBTI/盖洛普技术专家 • 厦门某高校外聘教师 • 51CTO特约合作讲师 • 网易云课堂签约讲师 •《深入理解设计模式》作者 一转眼马上要过年了&#xff0c;回首2023年&#xff0c;感觉自己无所事事、碌碌无…

python爬虫5

1.selenium交互 无页面浏览器速度更快 #配置好的自己不用管 from selenium import webdriverfrom selenium.webdriver.chrome.options import Optionschrome_options Options()chrome_options.add_argument(‐‐headless)chrome_options.add_argument(‐‐disable‐gpu)# path…

编程效率的跃升之路

编程是一门需要大量的时间和精力投入的技能&#xff0c;提高编程效率则是一个需要不断学习和实践的过程。结合笔者写bug多年的经验&#xff0c;一些学习建议和资源和大家share下。 一、编程如何提效&#xff1a; 熟悉开发工具&#xff1a;掌握常用的开发工具&#xff0c;如集…