【洛谷P1080】国王游戏
我们按照左右手数的乘积升序排序,就能使最多金币数最小了
为什么呢?
我们知道:
1)如果相邻的两个人交换位置,只会影响到这两个人的值,不会影响他人
2)假设相邻的两个人i, i + 1。设A[i] B[i] <= A[i + 1] B[i + 1],i之前所有人的左手乘积为S。
ans1 = max{S / B[i], S * A[i] / B[i + 1]}
ans2 = max{S / B[i + 1], S * A[i + 1] / B[i]}
因为,A[i] B[i] <= A[i + 1] B[i + 1]
所以,S A[i] / B[i + 1] <= S A[i + 1] / B[i]
又因为,S / B[i + 1] <= S * A[i] / B[i + 1]
所以,ans2 = S * A[i + 1] / B[i]
ans1 = max{S / B[i], S * A[i] / B[i + 1](<=S A[i + 1] / B[i])}
所以,ans1 <= ans2
高精度10,0000进制
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=,p=;
int s[N],a[N],tmp[N],ans;
int len,n,lens;
struct fx{
int l,r,x;
}d[];
bool cmp(fx a,fx b){
return a.x<b.x;
}
int check(){
if (len>lens)
return ;
for (int i=;i<=len;i++)
if (s[i]<tmp[i])
return ;
return ;
}
void M(int x){
int t=;
for (int i=;i<=len;i++){
a[i]=t+a[i]*x;
t=a[i]/p;
a[i]%=p;
}
if (t)
a[++len]=t;
}
void D(int y){
int i=len,l=,x=a[len];
while (i){
if (i>){
if (x<y)
x=x*p+a[--i];
}
else
break;
tmp[++l]=x/y;
x%=y;
}
if (x>=y)
tmp[++l]=x/y;
if (check()){
lens=l;
for (int i=;i<=l;i++)
s[i]=tmp[i];
}
}
void print(){
printf("%d",s[]);
for (int i=;i<=lens;i++)
if (s[i]>)
printf("%d",s[i]);
else if (s[i]>)
printf("0%d",s[i]);
else if (s[i]>)
printf("00%d",s[i]);
else if (s[i]>)
printf("000%d",s[i]);
else printf("0000%d",s[i]);
}
int main(){
ans=lens=;
scanf("%d",&n);
for (int i=;i<=n;i++){
scanf("%d %d",&d[i].l,&d[i].r);
d[i].x=d[i].l*d[i].r;
}
sort(d+,d+n+,cmp);
len=;
a[]=;
for (int i=;i<=n;i++){
M(d[i-].l);
D(d[i].r);
}
print();
return ;
}
STD
【洛谷P1080】国王游戏的更多相关文章
- 【流水调度问题】【邻项交换对比】【Johnson法则】洛谷P1080国王游戏/P1248加工生产调度/P2123皇后游戏/P1541爬山
前提说明,因为我比较菜,关于理论性的证明大部分是搬来其他大佬的,相应地方有注明. 我自己写的部分换颜色来便于区分. 邻项交换对比是求一定条件下的最优排序的思想(个人理解).这部分最近做了一些题,就一起 ...
- 【题解】洛谷 P1080 国王游戏
目录 题目 思路 \(Code\) 题目 P1080 国王游戏 思路 贪心+高精度.按\(a \times b\)从小到大排序就可以了. \(Code\) #include<bits/stdc+ ...
- 洛谷P1080 国王游戏 python解法 - 高精 贪心 排序
洛谷的题目实在是裹脚布 还编的像童话 这题要 "使得获得奖赏最多的大臣,所获奖赏尽可能的少." 看了半天都觉得不像人话 总算理解后 简单说题目的意思就是 根据既定的运算规则 如何排 ...
- [NOIP2012] 提高组 洛谷P1080 国王游戏
题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右 手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排 成一排,国王站在队伍 ...
- 洛谷 P1080 国王游戏
题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排成一排,国王站在队伍的最 ...
- 洛谷—— P1080 国王游戏
https://www.luogu.org/problem/show?pid=1080 题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整 ...
- 洛谷P1080 国王游戏【大数】【贪心】
题目:https://www.luogu.org/problemnew/show/P1080 题意: 一个国王和n个大臣,每个人左右手上都有一个数值. 现在将国王排在队首,将大臣进行排序.每个大臣的值 ...
- 洛谷P1080 国王游戏
两个难点. 怎么想到的贪心? 首先确定算法: 显然不是数据结构题.转成图论也不太可能. 考虑DP:f[i][j]表示前i个人取j状态的最小最大值......2^1000,直接放弃. 因为出现了“最大值 ...
- 洛谷 P1080 国王游戏 题解
原题 传送门 思路 分析 我们先假设队伍如下: People left hand right hand Before \(S_a\) A \(a_1\) \(b_1\) B \(a_2\) \(b_2 ...
- 【题解】洛谷P1080 [NOIP2012TG] 国王游戏(贪心+高精度)
次元传送门::洛谷P1080 思路 我们模拟一下只有两个大臣的时候发现 当a1∗b1<a2∗b2是ans1<ans2 所以我们对所有大臣关于左右手之积进行排序 得到最多钱的大臣就是 ...
随机推荐
- 4. read命令
4.1 作用 从标准输入中读取一行. 4.2 参数 -p 允许在read命令行中直接指定一个提示. -t 给用户的输入作限时规定. -n 规定read后变量所接收的字符的个数. -s 使得read命令 ...
- 2015年第六届蓝桥杯C/C++程序设计本科B组决赛
1.积分之谜(枚举) 2.完美正方形 3.关联账户(并查集) 4.密文搜索 5.居民集会 6.模型染色 1.积分之迷 小明开了个网上商店,卖风铃.共有3个品牌:A,B,C.为了促销,每件商品都会返固定 ...
- CentOS6.4 安装 erlang
wget http://www.erlang.org/download/otp_src_17.0.tar.gz -P /usr/local/src/ wget http://www.erlang.or ...
- 66. Regular Expression Matching
Regular Expression Matching Implement regular expression matching with support for '.' and '*'. '.' ...
- mysql存储emoji表情
微信获取的用户昵称nickname中带有emoji表情,转换成字符码后是这种形式“\xF0\x9F\x91\x8D\xE6\x94...”, 直接保存可能出现以下错误 Caused by: java. ...
- PIC32MZ tutorial -- Blinky LED
Today I finish the "Blinky LED" application on PIC32MZ starter kit. This application let L ...
- 32、shiro框架入门3.授权
一. 授权,也叫访问控制,即在应用中控制谁能访问哪些资源(如访问页面/编辑数据/页面操作等).在授权中需了解的几个关键对象:主体(Subject).资源(Resource).权限(Permission ...
- 温习SQL server
做了好几年的管理工作,技术上有些退步,现在又一一捡起来啦, 以下最近几天看到的好文章, SQL Server约束 http://blog.csdn.net/qq61394323/article/det ...
- ecshop的弊病和需要修改的地方,持续更新
ecshop的session机制是基于cookie的,用数据库进行缓存,当浏览器关闭cookie,sessions表会爆表,所以需要改进. 在cls_template.php中 $_echash值是固 ...
- UVM Top Testbench
top testbench在top_tb中包含进所有的文件,将DUT放在top_tb中(例化DUT),连接好各个端口,提供clk时钟和rst_n复位信号.最主要的是要给组件中的虚接口设置接口,一般是给 ...