[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 位大臣排成一排,国王站在队伍的最前面 ...
随机推荐
- centos开启ftp服务的步骤
1.安装vsftpd sudo yum install vsftpd -y 2.启动ftp服务 service vsftpd start 3. 加入开机启动 chkconfig vsftpd on ...
- Python集合及其运算
目录 集合(set) 集合的创建 集合的操作 集合的运算 子集与父集 集合(set) 集合是由不同可hash的值组成的,里面所有的值都是唯一的,也是无序的 集合的创建 >>>set_ ...
- mysql索引及优化
索引; 2.索引入门对于任何DBMS,索引都是进行优化的最主要的因素.对于少量的数据,没有合适的索引影响不是很大,但是,当随着数据量的增加,性能会急剧下降.如果对多列进行索引(组合索引),列的顺序非常 ...
- Azure系列2.1.10 —— CloudBlobClient
(小弟自学Azure,文中有不正确之处,请路过各位大神指正.) 网上azure的资料较少,尤其是API,全是英文的,中文资料更是少之又少.这次由于公司项目需要使用Azure,所以对Azure的一些学习 ...
- TextView不用ScrollViewe也可以滚动的方法
转自:http://www.jb51.net/article/43377.htm android TextView不用ScrollViewe也可以滚动的方法. TextView textview = ...
- python之路--装饰器
二 .通用装饰器的写法 python里面的动态代理. 存在的意义: 在不破坏原有的函数和原有函数的调用基础上,给函数添加新的功能 def wrapper(fn): # fn是目标函数. def inn ...
- Mybatis核心配置文件SqlMapConfig.xml
配置内容: SqlMapConfig.xml中配置的内容和顺序如下: 1.properties(属性) 2.settings(全局配置参数) 3.typeAliases(类型别名) 4.typeHan ...
- Jmeter安装与使用(压测)
一.介绍 Apache JMeter是100%纯JAVA桌面应用程序,被设计为用于测试客户端/服务端结构的软件(例如web应用程序).它可以用来测试静态和动态资源的性能,例如:静态文件,Java Se ...
- Visual Studio 2017调试开源项目代码
在我们的开发过程中很多时候我们会从GitHub上面下载一些开源的项目代码,然后在此基础上进行调试,正常情况下我们只需要将项目的源代码编译成Dll或者在.Net Core项目中直接引用相应的Nuget包 ...
- 不使用DataContext直接将ViewModels绑定到ItemsControl控件
在常规的MVVM设计模式中,都是通过DataContext将ViewModels的一个对象绑定到View的DataContext中,从而完成相应地绑定,在本文中我们将通过另外的一种思路来将ViewMo ...