首页 > 其他分享 >从国王游戏看邻项交换

从国王游戏看邻项交换

时间:2024-02-22 22:11:22浏览次数:24  
标签:frac 游戏 交换 times 看邻项 ans 证明 贪心

对于这道题,我们只来证明贪心的正确性,并不探究推导过程(这么玄学的贪心真有人能推导出来吗)。

我们需要证明按照 \(l_i\times r_i\) 是最优的。

现在,我们钦定序列按照 \(l_i\times r_i\) 排序,证明无论如何,从序列中交换若干对数都是不优的。

首先,交换若干对数的本质就是不断选择一对数对其交换,所以我们需要证明从序列中交换任意 \((a_i,a_j)\) 都是不优的,此处我们钦定 \(i<j\)。

可以发现,交换 \((a_i,a_j)\) 可以表示为:

交换 \((a_i,a_{i+1})\),交换 \((a_{i+1},a_{i+2})\)(注意此时 \(a_{i+1}\) 就是最初的 \(a_i\)),……,交换 \((a_{j-1},a_j)\)(此时 \(a_{j-1}\) 是原来的 \(a_i\))。

经过这样的操作,我们把 \(a_i\) 交换到了 \(a_j\) 的位置;同理,也可以把 \(a_j\) 交换到原来 \(a_i\) 的位置。

所以交换一对数的本质就是不断交换相邻的一对数。所以我们只需证明从序列中交换一对相邻的数是不优的。

这就是贪心的重要证明方法——邻项交换。

我们如果要证明一个贪心得到的序列是最优的,只需证明交换相邻一对数不会更优。

如果交换两个相邻元素对其他元素没有影响,只对这两个元素得到的答案有影响,那么就可以按照某种方法排序来贪心。

可以发现,邻项交换的重要特征就是答案不具有牵连泛性当然,这是我自己取的名词

牵连泛性,即对一些元素按照某种方式修改不会对其它元素的贡献产生牵连。

看回这道题,交换相邻两个数对于前面数和后面数的贡献显然不会变。

那我们现在考虑交换 \((a_i,a_j),j=i+1\) 会不会使两者对答案的贡献较大值更优,因为答案取的就是最大值。

设 \(x=\prod\limits_{k=0}^{i-1}l_k\),一开始两者的贡献较大值为 \(ans_1=\max(w_i,w_j)=\max(\frac{x}{r_i},\frac{x\times l_i}{r_j})\)。

交换后,贡献较大值为 \(ans_2=\max(\frac{x}{r_j},\frac{x\times l_j}{r_i})\)。

需要证明 \(ans_1\ge ans_2\),即四者中的最大值等于 \(ans_1\)。

显然,四者中最大值只能从 \(\frac{x\times l_i}{r_j}\) 和 \(\frac{x\times l_j}{r_i}\) 取,另两个必定不是最大值。

\(l_i\times r_i\ge l_j\times r_j\rightarrow \frac{l_i}{r_j}\ge \frac{l_j}{r_i}\rightarrow \frac{x\times l_i}{r_j}\ge \frac{x\times l_j}{r_i}\)

于是四者中的最大值为 \(ans_1\),交换后不会更优。

证毕。

开头说不会探究推导,但感觉可以推导。

从思考的角度来看,要对原始序列交换,看什么情况下更优,钦定不交换更优,可以倒推出同样的结论。

另外,此题需要高精度。

最后,附上 yk 课件中贪心的描述。

贪心算法难点在于很难一次想到一个正确的算法
直觉上的贪心很多时候是错的,但是你又很难去真正证明它的正确性
通常我们只能通过举反例证明其不对
或者通过构造各种数据对拍,如果拍不出错误就暂且当做它是正确的
在平时训练的时候,最好还是能够掌握贪心算法的大概证明
当然如果没有其他思路了,就大胆猜想,不用证明了

关于贪心证明方法。

临项交换:
如果交换两个相邻元素对其他元素没有影响,只对这两个元素得到的答案有影响,那么就可以按照某种方法排序来贪心。
范围缩放:
任何局部最优策略作用范围的扩展不会造成整体结果变差
反证法
数学归纳法

例题:CF746F

先写到这,等想起什么再更。

标签:frac,游戏,交换,times,看邻项,ans,证明,贪心
From: https://www.cnblogs.com/BYR-KKK/p/18028333

相关文章

  • P4606 [SDOI2018]战略游戏
    P4606[SDOI2018]战略游戏一个感觉比较新颖的题目,搞了一周题目大意:给定一个图,q组询问,每组给定k个点,求图上有几个点,删去后能使这k个点不连通题解:首先考虑删掉的点一定为割点,然后本题极像虚树,就可以考虑建圆方树然后,圆方树上的圆点,在两点路径上的,即为所求于是乎把k个点拎出来......
  • Unity引擎2D游戏开发,场景管理和切换
    需要用到的工具资源打包、远程热更新工具Addressables工具基本操作在Window菜单下方,会有AssetManagement,选择Addressables中的Groups会弹出相关菜单,将其拖入底部工具栏会提示没有创建Addressables的相关配置,则点击CreateAddressablesSettings这时候会在Project中,多出......
  • 这份攻略帮助你分分钟构建出“幻兽帕鲁游戏”极致体验
    春节前夕,一款名为《幻兽帕鲁(Palworld)》的游戏火爆出圈,在数天之内销量达到数百万,半月之内玩家达到了数千万之多。为了提升用户的体验,国内云厂商,诸如阿里云、华为云、腾讯云等纷纷推出幻兽帕鲁服务器,玩家可以在分钟级别内快速构建出开箱即用的幻兽帕鲁服务器。对于快速构建云服务......
  • 【专题】2023年全球移动应用(非游戏)营销趋势白皮书报告PDF合集分享(附原数据表)
    原文链接:https://tecdat.cn/?p=35180原文出处:拓端数据部落公众号随着国内政策调整,移动APP业务前景充满不确定性,但这也为出海应用带来了新机遇。2023年,AI和短剧应用的崛起为出海行业注入了信心。随着用户需求增长和技术进步,这两个领域有望在2024年迎来更大发展。阅读原文,获取专......
  • 微信小游戏开发流程
    微信小游戏开发相对于传统的网页小游戏开发有一些特定的步骤和要求,以下是一个微信小游戏开发的基本流程。1.注册和准备:注册微信开发者账号,并在微信开放平台创建小游戏项目。下载并安装微信开发者工具。2.项目初始化:在微信开发者工具中创建一个新的小游戏项目。选择合适的开......
  • Python练习案例_Pico Fermi Bagels猜数字游戏
    案例介绍--《Python编程快速上手2》在PicoFermiBagels这个逻辑推理游戏中,你要根据线索猜出一个三位数。游戏会根据你的猜测给出以下提示之一:如果你猜对一位数字但数字位置不对,则会提示“Pico”;如果你同时猜对了一位数字及其位置,则会提示“Fermi”;如果你猜测的数字及其位置......
  • 【游戏拆解】原神
    目前游戏开发进度到了需要更新攻击系统部分,这一段本身参考另外一个游戏,但是攻击部分又和原神很相似,所以这里对原神攻击部分进行拆解。 当然预期是拿原神的单身剑,双手剑,弓箭部分进行提取。现拆解单手剑部分。 需要人物攻击,我们可以按下鼠标左键,连击的话一直按就行。根据攻击动......
  • 【强烈推荐】更多免费单机游戏资源9200G
    ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓西红柿游戏站www.me06.com提供单机游戏和破解游戏下载▓▓......
  • 交换机的工作原理
    交换机的工作原理如下: 1.交换机根据收到数据帧中的源MAC地址建立该地址同交换机端口的映射,并将其写入MAC地址表中。 2.交换机将数据帧中的目的MAC地址同已建立的MAC地址表进行比较,以决定由那个端口进行转发。 3.如果数据帧中的目的MAC地址不在MAC地址表中,则向所有端口转......
  • Unity引擎2D游戏开发,场景互动的逻辑实现
    创建接口由于所有可互动的物体都会有一个共通的属性,即“互动”的处理。因此,新建一个接口,让所有可互动的物体都实现这个接口内的互动处理方法新建接口创建一个处理互动逻辑的抽象方法publicinterfaceIInteractable{voidTriggerAction();}创建处理宝箱交互逻辑的脚......