• 题目描述

恰逢 H 国国庆,国王邀请 t 位大臣来玩一个有奖游戏。首先,他让每个大臣在左、右手上面分别写下一个整数,国王自己也在左、右手上各写一个整数。然后,让这 t 位大臣排成一排,国王站在队伍的最前面。排好队后,所有的大臣都会获得国王奖赏的若干金币,每位大臣获得的金币数分别是:「排在该大臣前面的所有人的左手上的数的乘积」除以「他自己右手上的数」,然后向下取整得到的结果。

国王不希望某一个大臣获得特别多的奖赏,所以他想请你帮他重新安排一下队伍的顺序,使得获得奖赏最多的大臣,所获奖赏尽可能的少。注意,国王的位置始终在队伍的最前面。

输入

第一行包含一个整数 t,表示大臣的人数。

第二行包含两个整数 n 和 m,n,m之间用一个空格隔开,分别表示国王左手和右手上的整数。

接下来t 行,每行包含两个整数 x 和 y,x,y之间用一个空格隔开,分别表示每个大臣左手和右手上的整数。

输出

输出只有一行,包含一个整数,表示重新排列后的队伍中获奖赏最多的大臣所获得的金币数。

样例输入

3
1 1
2 3
7 4
4 6

样例输出

2

提示

  • 按 1、2、3 号大臣这样排列队伍,获得奖赏最多的大臣所获得金币数为2 ;
  • 按 1、3、2 这样排列队伍,获得奖赏最多的大臣所获得金币数为2 ;
  • 按 2、1、3 这样排列队伍,获得奖赏最多的大臣所获得金币数为2;
  • 按 2、3、1 这样排列队伍,获得奖赏最多的大臣所获得金币数为 9;
  • 按 3、1、2 这样排列队伍,获得奖赏最多的大臣所获得金币数为 2;
  • 按 3、2、1 这样排列队伍,获得奖赏最多的大臣所获得金币数为9 。

因此,奖赏最多的大臣最少获得 2个金币,答案输出2 。

  • 贪心

本题为贪心题目,大家可以先在网上查阅贪心相关内容,这里仅做简单介绍。

贪心是一种在每次决策时采取当前意义下最优策略的算法,使用贪心法要求问题的整体最优性可以由局部最优性导出。贪心算法的正确使用需要证明,常见手法有:1.微扰 2.范围缩放 3.决策包容性 4.反证法 5.数学归纳法。

有《算法进阶竞赛指南》可以查阅本书第45页。

  • 解题思路

在读题,并经过实际操作后,数据的处理是这样的(国王的右手无用,最后一位大臣的左手无用)即最后一个大臣得到的金币为1*2*7/6=2。

按照每个大臣左、右手上的数的乘积从小到大排序,就是最优排队方案。这个贪心算法,可以使用微扰法证明。

对于任意一种顺序,设n名大臣左、右手上的数分别是A[1]~A[n]与B[1]~B[n],国王手里的数是A[0]和B[0]。

如果我们交换相邻的两个大臣i与i+1,交换前这两个大臣得到的金币分别是:
                                      与        

交换之后这两个大臣获得的奖励是:

       与        

  • 参考答案

#include <bits/stdc++.h>
#define int long long
//将int定义更改为long long
#define x first
#define y second
using namespace std;
typedef pair<int,int>pii;
//将pair<int,int>更名为pii
//typedef可以更改很多,可以自行查阅
const int N=1010;
pii p[N];//由于int已被修改为long long
//应用signed定义main函数返回类型
signed main()
{int n;cin>>n;for(int i=0;i<=n;i++){int a,b;cin>>a>>b;//使得p[].x中存储a*b即大臣左右手乘积p[i].x=a*b,p[i].y=a;}//快排(按照pair结构中第一个出现的数,由小到大排序)sort(p+1,p+n+1);int res=0,ans=1;for(int i=0;i<=n;i++){   //在计算乘积之前应注意的是,p[].x存储了左右手乘积,每次运算应首先除以该大臣右手if(i) res=max(res,ans/(p[i].x/p[i].y));ans=ans*p[i].y;}cout<<res<<endl;return 0;
}

国王游戏.2333_微扰(邻项交换)证明相关推荐

  1. # 国王游戏(贪心+大数乘除+微扰法证明)

    国王游戏(贪心+大数乘除+微扰法证明) 题意:n个大臣和一个国王,左右手都有一个数,排队,国王始终拍在最前面,每个大臣的奖励为这个大臣前面的人的左手上的数之积除以这个大臣右手上的数.构造最优队伍,使得 ...

  2. 【c++入门(2)】邻项交换

    区间贪心在这里,做个铺垫 邻项交换是一种贪心的策略,他的要领有一个:就是假设只有两个元素,看看那个应该放前面. 我们通过几道例题来看看: 1. K11715 Protecting the Flower ...

  3. 【NOIP2012】【Luogu1080】国王游戏(贪心,邻项交换)

    problem n个人,每个人左手右手各写有一个数字. 把n个人排成一列,每个人得到的奖金是前面所有人左手上数字的乘积除以自 己右手上的数字下取整. 最小化每个人奖金的最大值. solution 一. ...

  4. 【NOIP2012】国王游戏

    Description 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n位大臣排成一排,国王 ...

  5. 贪心算法——国王游戏

    题目描述 孙悟空给花果山的小猴子们分桃子. 首先,他让每只小猴在左.右手上面分别写下一个整数,悟空自己也在左.右手上各写一个整数. 然后,让这 n 只小猴排成一排,悟空站在队伍的最前面. 排好队后,所 ...

  6. 做题记(4)P1080 国王游戏

    今天,做了洛谷上的P1080 国王游戏,题目如下: 题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整 ...

  7. LiberOJ - 2603. 「NOIP2012」国王游戏

    LiberOJ - 2603. 「NOIP2012」国王游戏 算法 (贪心) O ( n 2 ) O(n^2) O(n2) 我们先给出做法,再证明其正确性. 做法:直接将所有大臣按左右手上的数的乘积从 ...

  8. 【题解】P1080 国王游戏(贪心+高精python天下第一)

    P1080 国王游戏 题目描述 恰逢 H国国庆,国王邀请n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排成一排 ...

  9. 【贪心】国王游戏(ybtoj 贪心-1-4)

    国王游戏 ybtoj 贪心-1-4 题目大意 有一个国王和n个大臣 每人左右手分别有一个数,现在然你对大臣们排列(国王在第一个) 每个大臣所得金币是前面的人左手上的数的积除以他右手上的数 现在问你获得 ...

最新文章

  1. jquery each
  2. Java中的图像锐化操作
  3. 信息系统项目管理师-项目人力资源管理核心知识点思维脑图
  4. 图解分布式架构的演进过程!
  5. 免费试用 Mobile Me
  6. Topcoder 658Div2
  7. 实时视频直播客户端技术盘点:Native、HTML5、WebRTC、微信小程序
  8. 基于JAVA+Servlet+JSP+MYSQL的会议管理系统
  9. 防止浏览器拦截的新窗口打开链接方案
  10. 基于visual Studio2013解决面试题之1305字符串所有子集
  11. Android中View转换为Bitmap及getDrawingCache=null的解决方法
  12. Java开发工程师面试笔试试题,真题;
  13. vue项目 echarts 中国地图,vue项目 echarts中国地图点击省份显示对应它的各个市,从零开始。
  14. ELK+filebeat+redis 日志分析平台
  15. Web自动化漏洞检测工具:Xray
  16. 敏捷实践 | 如何正确使用故事点预估工作量?
  17. 黑猴子的家:Kali Linux + Vmware 15 安装操作系统
  18. DevOps企业实践指南(1):DevOps能为我们带来什么
  19. 范罗士空气净化器PT65评测
  20. css手机端长摁背景变色,css动画,如何实现点击/长按时背景色切换的动画效果(背景从中间向两边延展)...

热门文章

  1. Hank的无线802.11学习笔记--part 4
  2. 掌握未来趋势的测试工程师成长之路
  3. 《PostgreSQL 开发指南》第 08 篇 备份与恢复
  4. linux 能打开exe文件,linux能运行exe文件吗
  5. Processing编程入门-02——添加图片 小游戏
  6. Kaggle注册的验证码一直有unknown error
  7. Excel 2010 SQL应用097 聚合函数之方差或标准方差
  8. Job Scheduling简介
  9. 【Go学习笔记】数据类型之切片(slice)
  10. 论劳动者的休息权及其法律保障