思路:
贪心+快排
假设除了序列中相邻的两个大臣AB,其它大臣的位置都已经排好了。而AB的先后对前面和后面的结果都不会有影响,这里考虑A排前面最优的条件:左手数值用,右手数值用,表示AB前面大臣左手数值的乘积。
1.A排前面时:,。
2.B排前面时,,。
3.。
4.因为,所以不等式3需要满足,即。
5.所以只要按每个大臣的左手乘右手值从小到大排序就能保证获得奖赏最多的大臣,所获奖赏尽可能的少。
6.再找全部人的最大值即可。
7.大数乘法+除法,,所以我被迫用py取巧。
Code:
n = int(input()) a,b = map(int, input().split()) ret = [] for i in range(n): temp = list(map(int, input().split())) ret.append([temp[0],temp[1]]) ret.sort(key = lambda x:x[0]*x[1]) ans = 0 for i in ret: if a//i[1] > ans: ans = a//i[1] a *= i[0] print(ans)