【2024.2.4练习】国王游戏

题目描述


题目思路

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

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

假设最后一个为第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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

jquery事件

目录 &#x1f338;页面载入ready &#x1f338;鼠标事件 &#x1f339;点击事件 &#x1f490;按下抬起变色 &#x1f339;悬浮事件 &#x1f339;移动事件 &#x1f338;​编辑 &#x1f338;键盘事件 &#x1f339;keypress &#x1f339;keydown &#x1f338;焦…

SD-WAN:企业网络转型的不可逆趋势

随着SD-WAN的逐渐发展和完善&#xff0c;越来越多的企业开始选择SD-WAN进行网络转型。IDC研究显示&#xff0c;已有47%的企业成功迁移到SD-WAN&#xff0c;另有48%的公司表示&#xff0c;未来两个月内将纷纷投入这一技术的部署。 据Channel Futures报道&#xff0c;一位合作伙伴…

机器学习本科课程 实验3 决策树处理分类任务

实验3.1 决策树处理分类任务 使用sklearn.tree.DecisionTreeClassifier完成肿瘤分类&#xff08;breast-cancer&#xff09;计算最大深度为10时&#xff0c;十折交叉验证的精度(accuracy)&#xff0c;查准率(precision)&#xff0c;查全率(recall)&#xff0c;F1值绘制最大深度…

【云原生运维问题记录】kubesphere登录不跳转问题

文章目录 现象问题排查 结论先行&#xff1a;kubesphere-system名称空间下reids宕机重启&#xff0c;会判断是否通过registry-proxy重新拉取镜像&#xff0c;该镜像原本是通过阿里云上拉取&#xff0c;代理上没有出现超时情况&#xff0c;导致失败。解决方案&#xff1a;删除re…

WordPress从入门到精通【安装部署】

初识WordPress WordPress&#xff0c;简称WP&#xff0c;其简称的由来是取英文单词“word”与“press”的首字母 WP中文官网 1WP主站&#xff08;英文&#xff09; 官方标称&#xff0c;已有43%的网站在使用WordPress WordPress亮点 WP使用PHP语言开发&#xff0c;兼容性极…

【Java程序设计】【C00248】基于Springboot的摄影跟拍预定管理系统(有论文)

基于Springboot的摄影跟拍预定管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的摄影跟拍预定管理系统 本系统分为系统功能模块、管理员功能模块、摄影师功能模块以及用户功能模块。 系统功能模块&#xf…

SpringMVC精简知识点

SpringMVC 数据格式化基本数据类型和字符串自动转换特殊数据类型和字符串自动转换 验证及国际化应用实例注意事项和使用细节注解的结合使用数据类型转换校验核心类-DatBinder取消某个属性的绑定中文乱码解决处理json和HttpMessageConverter<T>作业布置SpringMVC文件上传自…

Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(四)

原文&#xff1a;Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第二部分&#xff1a;神经网络和深度学习 第十章&#xff1a;使用 Keras 入门人工神经网络 鸟类启发我们飞行&#xff0c;牛蒡植…

Qt PCL学习(一):环境搭建

参考 (QT配置pcl)PCL1.12.1QT5.15.2vs2019cmake3.22.4vtk9.1.0visual studio2019Qt5.15.2PCL1.12.1vtk9.1.0cmake3.22.2 本博客用到的所有资源 版本一览&#xff1a;Visual Studio 2019 Qt 5.15.2 PCL 1.12.1 VTK 9.1.0https://pan.baidu.com/s/1xW7xCdR5QzgS1_d1NeIZpQ?pw…

【CSS + ElementUI】更改 el-carousel 指示器样式且隐藏左右箭头

需求 前三条数据以走马灯形式展现&#xff0c;指示器 hover 时可以切换到对应内容 实现 <template><div v-loading"latestLoading"><div class"upload-first" v-show"latestThreeList.length > 0"><el-carousel ind…

2024-2-4-复习作业

源代码&#xff1a; #include <stdio.h> #include <stdlib.h> typedef int datatype; typedef struct Node {datatype data;struct Node *next;struct Node *prev; }*DoubleLinkList;DoubleLinkList create() {DoubleLinkList s(DoubleLinkList)malloc(sizeof(st…

Docker进阶篇-轻量级可视化工具Portainer

一、简介 Portainer是一款轻量级的应用&#xff0c;它提供了图形化界面&#xff0c;用于方便地管理Docker环境&#xff0c;包括单机环 境和集群环境。 Portainer分为开源社区版&#xff08;CE版&#xff09;和商用版&#xff08;BE版/EE版&#xff09;。 官网&#xff1a;P…

LeetCode:2.两数相加

目录 题目&#xff1a;​编辑2. 两数相加 - 力扣&#xff08;LeetCode&#xff09; 分析问题&#xff1a; 官方的优秀代码博主的注释&#xff1a; 博主的辣眼代码&#xff0c;无注释&#xff0c;拉出来拷打自己&#xff1a; 每日表情包&#xff1a; 2. 两数相加 - 力扣&am…

深度学习-随机梯度下降

在训练过程中使用随机梯度下降&#xff0c;但没有解释它为什么起作用。为了澄清这一点&#xff0c;将继续更详细地说明随机梯度下降&#xff08;stochastic gradient descent&#xff09;。 %matplotlib inline import math from mxnet import np, npx from d2l import mxnet …

C# CAD界面-自定义工具栏(二)

运行环境 vs2022 c# cad2016 调试成功 一、引用 acdbmgd.dllacmgd.dllaccoremgd.dllAutodesk.AutoCAD.Interop.Common.dllAutodesk.AutoCAD.Interop.dll using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.T…

RK3568平台 设备模型基本框架-kobject 和kset

一.什么是设备模型 字符设备驱动通常适用于相对简单的设备&#xff0c;对于一些更复杂的功能&#xff0c;比如说电源管理和热插拔事件管理&#xff0c;使用字符设备框架可能不够灵活和高效。为了应对更复杂的设备和功能&#xff0c;Linux内核提供了设备模型。设备模型允许开发…

西瓜书学习笔记——流形学习(公式推导+举例应用)

文章目录 等度量映射&#xff08;仅保留点与其邻近点的距离&#xff09;算法介绍实验分析 局部线性嵌入&#xff08;不仅保留点与其邻近点的距离还要保留邻近关系&#xff09;算法介绍实验分析 等度量映射&#xff08;仅保留点与其邻近点的距离&#xff09; 算法介绍 等度量映…

Unity动画循环偏移的使用

最近项目中有一个需求是做煤矿中猴车的动画&#xff0c;动画本身不复杂&#xff0c;但是猴车很多&#xff0c;怎么能简化工作量呢&#xff1f; 首先单个猴车的动画循环是必须要做的&#xff0c;重点是怎么让不同的猴车动画按顺序错开&#xff0c;研究了以下&#xff0c;可以通过…

后端登录校验

文章目录 登录校验CookieSessionJWT生成JWT校验JWT基于JWT进行身份验证CSRF Cookie、Session、Token的区别&#xff1f;过滤器(Filter)配置过滤器过滤器链 登录校验 由于HTTP协议是无状态的&#xff0c;我们在进行登录后等一系列接口请求是无法直接区分是哪一个用户的发给服务…

电路设计(10)——超温报警电路的proteus仿真

1.题目背景 在现实生活中&#xff0c;常有一种工程技术&#xff0c;即带有自动温度补偿的设备&#xff0c;能在规定温度内正常工作。但是为了设备安全&#xff0c;需设定工作的上限温度&#xff0c;万一温控补偿失效&#xff0c;设备温度一旦超出上限温度时&#xff0c;便立即切…