【2024.2.4练习】国王游戏

2024-02-05 06:04
文章标签 游戏 练习 国王 2024.2

本文主要是介绍【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;
}

这篇关于【2024.2.4练习】国王游戏的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/679931

相关文章

Python开发围棋游戏的实例代码(实现全部功能)

《Python开发围棋游戏的实例代码(实现全部功能)》围棋是一种古老而复杂的策略棋类游戏,起源于中国,已有超过2500年的历史,本文介绍了如何用Python开发一个简单的围棋游戏,实例代码涵盖了游戏的... 目录1. 围棋游戏概述1.1 游戏规则1.2 游戏设计思路2. 环境准备3. 创建棋盘3.1 棋盘类

国产游戏崛起:技术革新与文化自信的双重推动

近年来,国产游戏行业发展迅猛,技术水平和作品质量均得到了显著提升。特别是以《黑神话:悟空》为代表的一系列优秀作品,成功打破了过去中国游戏市场以手游和网游为主的局限,向全球玩家展示了中国在单机游戏领域的实力与潜力。随着中国开发者在画面渲染、物理引擎、AI 技术和服务器架构等方面取得了显著进展,国产游戏正逐步赢得国际市场的认可。然而,面对全球游戏行业的激烈竞争,国产游戏技术依然面临诸多挑战,未来的

RabbitMQ练习(AMQP 0-9-1 Overview)

1、What is AMQP 0-9-1 AMQP 0-9-1(高级消息队列协议)是一种网络协议,它允许遵从该协议的客户端(Publisher或者Consumer)应用程序与遵从该协议的消息中间件代理(Broker,如RabbitMQ)进行通信。 AMQP 0-9-1模型的核心概念包括消息发布者(producers/publisher)、消息(messages)、交换机(exchanges)、

【Rust练习】12.枚举

练习题来自:https://practice-zh.course.rs/compound-types/enum.html 1 // 修复错误enum Number {Zero,One,Two,}enum Number1 {Zero = 0,One,Two,}// C语言风格的枚举定义enum Number2 {Zero = 0.0,One = 1.0,Two = 2.0,}fn m

MySql 事务练习

事务(transaction) -- 事务 transaction-- 事务是一组操作的集合,是一个不可分割的工作单位,事务会将所有的操作作为一个整体一起向系统提交或撤销请求-- 事务的操作要么同时成功,要么同时失败-- MySql的事务默认是自动提交的,当执行一个DML语句,MySql会立即自动隐式提交事务-- 常见案例:银行转账-- 逻辑:A给B转账1000:1.查询

html css jquery选项卡 代码练习小项目

在学习 html 和 css jquery 结合使用的时候 做好是能尝试做一些简单的小功能,来提高自己的 逻辑能力,熟悉代码的编写语法 下面分享一段代码 使用html css jquery选项卡 代码练习 <div class="box"><dl class="tab"><dd class="active">手机</dd><dd>家电</dd><dd>服装</dd><dd>数码</dd><dd

火柴游戏java版

代码 /*** 火柴游戏* <p>* <li>有24根火柴</li>* <li>组成 A + B = C 等式</li>* <li>总共有多少种适合方式?</li>* <br>* <h>分析:</h>* <li>除去"+"、"="四根,最多可用火柴根数20根。</li>* <li>全部用两根组合成"1",最大数值为1111。使用枚举法,A和B范围在0~1111,C为A+B。判断</li>** @

国产游戏行业的崛起与挑战:技术创新引领未来

国产游戏行业的崛起与挑战:技术创新引领未来 近年来,国产游戏行业蓬勃发展,技术水平不断提升,许多优秀作品在国际市场上崭露头角。从画面渲染到物理引擎,从AI技术到服务器架构,国产游戏已实现质的飞跃。然而,面对全球游戏市场的激烈竞争,国产游戏技术仍然面临诸多挑战。本文将探讨这些挑战,并展望未来的机遇,深入分析IT技术的创新将如何推动行业发展。 国产游戏技术现状 国产游戏在画面渲染、物理引擎、AI

014.Python爬虫系列_解析练习

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈 PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈 Oracle数据库教程:👉👉 Oracle数据库文章合集 👈👈 优

第四次北漂----挣个独立游戏的素材钱

第四次北漂,在智联招聘上,有个小公司主动和我联系。面试了下,决定入职了,osg/osgearth的。月薪两万一。 大跌眼镜的是,我入职后,第一天的工作内容就是接手他的工作,三天后他就离职了。 我之所以考虑入职,是因为 1,该公司有恒歌科技的freex平台源码,可以学学,对以前不懂的解解惑。 2,挣点素材钱,看看张亮002的视频,他用了6000多,在虚幻商城买的吸血鬼游戏相关的素材,可以玩两年。我