[NOIp2012] 国王游戏(排序 + 贪心 + 高精度)
题意
给你两个长为 \(n+1\) 的数组 \(a,b\) ,你需要定义一个顺序 \(p\) (\(p_0\) 永远为 \(0\))
能够最小化
\]
\(1 \le n \le 1000, 1 \le a, b \le 10^4\)
题解
开始把原来没做完的 \(NOIp\) 题都水掉qwq
类似这种题都需要有个巧妙的排序方法,使得答案最小,其实可以大力找规律或者猜结论发现按 \(a_i \times b_i\) 排序是最优秀的。
我们尝试推导这个结论。
其实我们发现只需要考虑相邻两个数如何交换才是最优的,因为任意排列都可以由交换相邻两个数得到。
假设当前两个位置为 \(i, i+1\) ,记 \(\displaystyle p = \prod_{j = 0}^{i - 1}a_j\) 。
我们令 \(ans_0\) 为交换前的最大值,\(ans_1\) 为交换后的,那么有
ans_0 &= \max\{\frac{p}{b_i}, \frac{p \times a_i}{b_{i+1}}\} \\
ans_1 &= \max\{\frac{p}{b_{i+1}}, \frac{p \times a_{i+1}}{b_{i}}\}
\end{cases}
\]
因为有
\]
不难发现有
\displaystyle \frac{p \times a_i}{b_{i+1}} \ge \frac{p}{b_{i+1}} \\
\displaystyle \frac{p \times a_{i+1}}{b_{i}} \ge \frac{p}{b_i}
\end{cases}
\]
所以当 \(ans_1 \ge ans_0\) 也就是交换后不会更优,当且仅当
\frac{p \times a_{i+1}}{b_{i}} &\ge \frac{p \times a_i}{b_{i+1}} \\
a_{i + 1} \times b_{i + 1} &\ge a_i \times b_i
\end{aligned}
\]
所以我们不难发现当 \(a_i \times b_i\) 升序的时候是最优的。
然后答案需要用高精度存储,但是我不想写。。。(用 \(python\) 水过了2333)
考试时候应该还是会头铁写高精度的。。
总结
对于重排序列使得一些要求的东西最优的时候,可以考虑不等式推导。
然后也不需要考虑相隔很远的两个数,可以考虑相邻两个数,结论也是一样的,因为交换相邻两个数也可以使得序列排序。
代码
教你 \(17\) 行 \(python3\) 代码水过2333
n = (int)(input())
a, b = map(int, input().split())
array = [[0] * 2] * n
for i in range(0, n):
array[i] = list(map(int, input().split()))
def Cmp(elem):
return elem[0] * elem[1]
array.sort(key = Cmp)
ans = 0
tot = a
for i in range(0, n):
ans = max(ans, tot // array[i][1])
tot = tot * array[i][0]
print(ans)
[NOIp2012] 国王游戏(排序 + 贪心 + 高精度)的更多相关文章
- 【NOIP 2012 国王游戏】 贪心+高精度
题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右 手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排 成一排,国王站在队伍 ...
- 【题解】洛谷P1080 [NOIP2012TG] 国王游戏(贪心+高精度)
次元传送门::洛谷P1080 思路 我们模拟一下只有两个大臣的时候发现 当a1∗b1<a2∗b2是ans1<ans2 所以我们对所有大臣关于左右手之积进行排序 得到最多钱的大臣就是 ...
- luogu1080 国王游戏(贪心+高精度)
貌似这道题是碰巧蒙对了贪心的方式..就是把ai*bi越小的放在越前面 (不过也符合直觉) 然后统计答案需要用高精度,然后就调了一年 #include<cstdio> #include< ...
- luoguP1080 国王游戏 (贪心+高精度)
题目链接:https://www.luogu.org/problemnew/show/P1080 参考:https://www.luogu.org/problemnew/solution/P1080 ...
- Luogu 1080 【NOIP2012】国王游戏 (贪心,高精度)
Luogu 1080 [NOIP2012]国王游戏 (贪心,高精度) Description 恰逢H国国庆,国王邀请n位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己 ...
- P1080 国王游戏 (等待高精度AC)
P1080 国王游戏 题解 贪心策略:按照大臣左右手数字乘积从小到大排序 假设我们已经把大臣排了一个顺序 假定在这个顺序下我们可以保证 得到奖赏最多的大臣所得奖赏最少 那么我们一旦交换任意两个大臣, ...
- [noip2012]国王游戏<贪心+高精度>
题目链接: https://vijos.org/p/1779 https://www.luogu.org/problem/show?pid=1080 http://codevs.cn/problem/ ...
- NOIP2012 国王游戏
2国王游戏 (game.cpp/c/pas) [问题描述] 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数 ...
- 继续写高精!noip2012国王游戏。。。
国王游戏 题目描述: 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排成一排,国王 ...
- NOIP2012国王游戏(60分题解)
题目描述 恰逢 H国国庆,国王邀请n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排成一排,国王站在队伍的最前面 ...
随机推荐
- 分享一个小设置-项目启动时服务器指向本地IIS
背景,在X公司做的一个网站登录时需要域名的支持,就是说浏览器地址栏在localhost+端口号的形式下无法实现登录(必须是xxxx域名的形式), 但是很多时候都会先在线下进行测试,既然本地没有线上的环 ...
- Ajax中文乱码的解决
网上有很多解决Ajax中文乱码的例子,昨晚弄了很久,最终确定一种“确实”有效地方法.首先我有必要说明一下我遇到的情况:有一个注册页面,注册用户填完信息并提交后,页面获得信息并通过java servle ...
- Tomcat异常及解决办法——持续更新中
公司项目,开发语言为java,中间件为Tomcat,运行过程中,从Tomcat出现了一些异常,现将异常及解决办法记录如下,仅供参考.(不断在补充中.......) 异常一: 1.日志内容 org.ap ...
- [转帖]关于CPU Cache -- 程序猿需要知道的那些事
关于CPU Cache -- 程序猿需要知道的那些事 很早之前读过作者的blog 记得作者在facebook 工作.. 还写过mysql相关的内容 大拿 本文将介绍一些作为程序猿或者IT从业者应该知道 ...
- npm的nrm命令使用--设置镜像地址
npm下载会很慢,因为npm默认从国外下载资源,建议修改npm镜像源地址 1.运行npm i nrm -g全局安装nrm包: 2.使用nrm ls查看当前所有可用的镜像源地址以及当前所使用的镜像源地址 ...
- jQuery ajax解析xml文件demo
解析xml文件,然后将城市列表还原到下拉列表框中:当选择下拉列表框时,在对应的文本框中显示该城市信息. 前端代码: <!doctype html> <html> <hea ...
- mac下php开发环境的搭建
1.phpstorm 在官网:https://www.jetbrains.com/phpstorm/,下载最新版:phpstorm-2016.2.1 在http://15.idea.lanyus.co ...
- 工作效率提升之Eclipse篇(1):干掉烦人的xml文件的validation
每次启动maven项目,都会有一堆烦人的xml文件的validation,一旦网络较慢,项目重新启动的时候,这些多余的验证纯属浪费时间. Eclipse上取消validation的方法: 1.菜单[W ...
- eclipse 编码
单个修改 右击 选择properties
- 从主机A得到id_rsa.pub文件,在主机B创建用户danny加入该文件,实现主机A免密登录主机B
操作步骤: 1.主机A 生成公钥id_rsa.pub文件并导出该文件 root@mytest:~# ssh-keygen Generating public/private rsa key pair. ...