博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷—— P1080 国王游戏
阅读量:4658 次
发布时间:2019-06-09

本文共 2374 字,大约阅读时间需要 7 分钟。

题目描述

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

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

输入输出格式

输入格式:

 

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

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

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

 

输出格式:

 

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

 

输入输出样例

输入样例#1:
3 1 1 2 3 7 4 4 6
输出样例#1:
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。

【数据范围】

对于 20%的数据,有 1≤ n≤ 10,0 < a、b < 8;

对于 40%的数据,有 1≤ n≤20,0 < a、b < 8;

对于 60%的数据,有 1≤ n≤100;

对于 60%的数据,保证答案不超过 10^9;

对于 100%的数据,有 1 ≤ n ≤1,000,0 < a、b < 10000。

NOIP 2012 提高组 第一天 第二题

 

贪心

设 i, j=i+1     tot为i之前的所有人的左手积   Li,Ri Lj Rj

则 j 的奖赏为 tot*Li/Rj     若交换 i与j     i  的奖赏为 tot*Lj/Ri 

尽量使前面的大臣奖赏少的话    应是   tot*Li/Rj < tot*Lj/Ri    即 Li*Ri<Lj*Rj

1 #include 
2 #include
3 4 using namespace std; 5 6 const int N(1001); 7 int n,ans,tot=1; 8 9 struct Node10 {11 int l,r;12 }p[N];13 bool cmp(Node a,Node b)14 {15 return a.l*a.r
60

 

高精AC、、、数组开大、、e xin

1 #include 
2 #include
3 #include
4 5 using namespace std; 6 7 const int N(1001); 8 int n; 9 10 struct Node11 {12 int l,r;13 }p[N];14 bool cmp(Node a,Node b)15 {16 return a.l*a.r
9)33 {34 ove=num[i]/10;35 num[i]%=10;36 num[0]=max(num[0],i+1);37 }38 else ove=0;39 }40 for(;!num[num[0]];) num[0]--;41 }42 void del(int x)43 {44 for(int t=0,i=num[0];i;i--)45 {46 int tt=num[i];47 num[i]=(t*10+tt)/x;48 t=(t*10+tt)%x;49 }50 for(;!num[num[0]];) num[0]--;51 }52 void print()53 {54 for(int i=num[0];i;i--) printf("%d",num[i]);55 }56 57 };58 Gj temp,ans;59 Gj MAX(Gj a,Gj b)60 {61 if(a.num[0]>b.num[0]) return a;62 else if(a.num[0]
b.num[i]) return a;66 else if(a.num[i]

 

转载于:https://www.cnblogs.com/Shy-key/p/7338412.html

你可能感兴趣的文章
ThinkPHP3.1 常量参考
查看>>
Java网页数据采集器[中篇-数据存储]【转载】
查看>>
送你一颗子弹
查看>>
AOP JoinPoint
查看>>
在IBM学到的东西,到底对我的程序生涯产生了多大的影响
查看>>
【Linux】Linux常用命令
查看>>
python3 练习题100例 (十一)
查看>>
python3 练习题100例 (十三)
查看>>
bootstrap-treeview 树形菜单带复选框以及级联选择
查看>>
读《大道至简》第一章有感
查看>>
bzoj3238:[Ahoi2013]差异
查看>>
Easy-ARM IMX283 移植RTL8192CU驱动
查看>>
javascript-装饰者模式
查看>>
最近的几个任务
查看>>
去哪儿网2015校园招聘产品经理笔试(时间:2014-9-23)
查看>>
java默认继承
查看>>
关闭 禁用 Redis危险命令
查看>>
三年工作总结
查看>>
MySQL数据库实验:任务二 表数据的插入、修改及删除
查看>>
asp.net网站前台通过DataList展示信息的代码
查看>>