传送门

国王游戏一样的分析

考虑相邻的两个大臣,设他们前面的\(\sum a_j\)为\(s\),同时注意到后面人的贡献更大

所以\(i\)在前面时,\(c_j=\max(\max(c_{last},s+a_i)+b_i,s+a_i+a_j)+b_j\)

\(j\)在前面时,\(c_i=\max(\max(c_{last},s+a_j)+b_j,s+a_i+a_j)+b_i\)

如果最优方案里\(i\)在\(j\)前面,则刚才的\(c_j<c_i\)

即$$\max(\max(c_{last},s+a_i)+b_i,s+a_i+a_j)+b_j<\max(\max(c_{last},s+a_j)+b_j,s+a_i+a_j)+b_i$$$$\max(c_{last}+b_i+b_j,s+a_i+b_i+b_j,s+a_i+a_j+b_j)<\max(c_{last}+b_j+b_i,s+a_j+b_j+b_i,s+a_i+a_j+b_i)$$$$\max(a_i+b_i+b_j,a_i+a_j+b_j)<\max(a_j+b_j+b_i,a_i+a_j+b_i)$$$$\max(b_i,a_j)+a_i+b_j<\max(b_j,a_i)+a_j+b_i$$$$\max(a_j,b_i)-a_j-b_i<\max(a_i,b_j)-a_i-b_j$$

这时左右两边分别等价于\(-\min(a_j,b_i),-\min(a_i,b_j)\),进一步化简得\(\min(a_i,b_j)<\min(a_j,b_i)\)

然后直接这样做就可以了

吗?

其实布星,这个条件不满足传递性,导致可能多次交换后使得后面结果变大 具体是什么我也讲不清

观察条件\(\min(a_i,b_j)<\min(a_j,b_i)\),这是要我们把\(a\)小的,\(b\)大的放前面,同时考虑\(a,b\)大小关系

对于所有\(a<b\)的,就按\(a\)升序排序

对于所有\(a>b\)的,就按\(b\)降序排序

\(a=b\)好像是用脚随便放( 就直接和第一种情况合并救星了

对于所有情况,考虑\(a_i<b_i\ a_j>b_j\),根据\(\min(a_i,b_j)<\min(a_j,b_i)\),则显然是把\(a<b\)的放在\(a>b\)的之前

总结:记\(d_i=\min(a_i,b_i)\)然后对三元组\(\{a_i,b_i,d_i\}\)按\(d_i\)升序排序,然后如果\(a_i=d_i\)放前面,否则放后面

#include<bits/stdc++.h>
#define LL long long
#define il inline
#define re register
#define db double
#define eps (1e-5) using namespace std;
const int N=20000+10;
il LL rd()
{
re LL x=0,w=1;re char ch;
while(ch<'0'||ch>'9') {if(ch=='-') w=-1;ch=getchar();}
while(ch>='0'&&ch<='9') {x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
return x*w;
}
struct nn
{
int d,a,b;
bool operator < (const nn &bb) const {return d<bb.d;}
}z[N];
LL n,a[N],b[N],c[N]; int main()
{
int T=rd();
while(T--)
{
n=rd();
for(int i=1;i<=n;i++)
{
int x=rd(),y=rd();
z[i].a=x,z[i].b=y,z[i].d=min(x,y);
}
sort(z+1,z+n+1);
for(int i=1,l=1,r=n;i<=n;i++)
{
if(z[i].d==z[i].a) a[l]=z[i].a,b[l]=z[i].b,++l;
else a[r]=z[i].a,b[r]=z[i].b,--r;
}
c[1]=a[1]+b[1];
LL su=a[1];
for(int i=2;i<=n;i++)
{
su+=a[i];
c[i]=max(c[i-1],su)+b[i];
}
printf("%lld\n",c[n]);
}
return 0;
}

luogu P2123 皇后游戏的更多相关文章

  1. Luogu P2123 皇后游戏(贪心)

    题目链接:P2123 皇后游戏 如果证明这个题为什么是贪心的话,我是不会的,但是一看这个题目就是一个贪心,然后满足贪心的性质: 都能从两个人(东西)扩展到n个人(东西) 一定能从相邻状态扩展到不相邻的 ...

  2. [luogu P2123] 皇后游戏 解题报告(贪心)

    题目链接:https://www.luogu.org/problemnew/show/P2123 题目大意: 给定a数组和b数组,要求最小化c数组中的最大值 题解: 考虑微扰法,推一波式子先 设$x= ...

  3. 洛谷 P2123 皇后游戏 解题报告

    P2123 皇后游戏 题意: 给定\(T\)组长为\(n\)的\(A\),\(B\)数组和\(C\)的计算方法,求一种排列方法,使最大的\(C\)最小化. 数据范围: \(1 \le T \le 10 ...

  4. 【流水调度问题】【邻项交换对比】【Johnson法则】洛谷P1080国王游戏/P1248加工生产调度/P2123皇后游戏/P1541爬山

    前提说明,因为我比较菜,关于理论性的证明大部分是搬来其他大佬的,相应地方有注明. 我自己写的部分换颜色来便于区分. 邻项交换对比是求一定条件下的最优排序的思想(个人理解).这部分最近做了一些题,就一起 ...

  5. P2123 皇后游戏

    题目背景 还记得 NOIP 2012 提高组 Day1 的国王游戏吗?时光飞逝,光阴荏苒,两年 过去了.国王游戏早已过时,如今已被皇后游戏取代,请你来解决类似于国王游 戏的另一个问题. 题目描述 皇后 ...

  6. [洛谷P2123]皇后游戏

    很抱歉,这个题我做的解法不是正解,只是恰巧卡了数据 目前数据已经更新,这个题打算过一段时间再去写. 目前在学习DP,这个会暂时放一放,很抱歉 这个题是一个国王游戏的变形(国王游戏就把我虐了qwq) 题 ...

  7. luoguP2123 皇后游戏——微扰法的应用与排序传递性的证明

    题目背景 还记得 NOIP 2012 提高组 Day1 的国王游戏吗?时光飞逝,光阴荏苒,两年 过去了.国王游戏早已过时,如今已被皇后游戏取代,请你来解决类似于国王游 戏的另一个问题. 题目描述 皇后 ...

  8. [luogu]P1070 道路游戏[DP]

    [luogu]P1070 道路游戏 题目描述小新正在玩一个简单的电脑游戏.游戏中有一条环形马路,马路上有 n 个机器人工厂,两个相邻机器人工厂之间由一小段马路连接.小新以某个机器人工厂为起点,按顺时针 ...

  9. [Luogu P3825] [NOI2017] 游戏 (2-SAT)

    [Luogu P3825] [NOI2017] 游戏 (2-SAT) 题面 题面较长,略 分析 看到这些约束,应该想到这是类似2-SAT的问题.但是x地图很麻烦,因为k-SAT问题在k>2的时候 ...

随机推荐

  1. 一个本科学生对Linux的认知

    我是一名大三的普通一本大学的软件工程的一名学生,学校开设了一些关于系统开发的课程,纸上得来终觉浅,学校的课程课时较短,想要在56个课时之内学会一些公司需要的技能,无疑是纸上谈兵,一门语言的学习,需要的 ...

  2. ansible系列3-pyYAML

    规则一:缩进 yaml使用一个固定的缩进风格表示数据层结构关系,Saltstack需要每个缩进级别由两个空格组成.一定不能使用tab键 注意:编写yaml文件,就忘记键盘有tab 规则二:冒号 CMD ...

  3. MT【216】韦达定理

    设$n$为正整数,$a_1,a_2,\cdots,a_n;b_1,b_2,\cdots,b_n;A,B$都是正数, 满足$a_i\le b_i,a_i\le A,i=1,2,\cdots,n$ 且$\ ...

  4. LOJ #6436. 「PKUSC2018」神仙的游戏(字符串+NTT)

    题面 LOJ #6436. 「PKUSC2018」神仙的游戏 题解 参考 yyb 的口中的长郡最强选手 租酥雨大佬的博客 ... 一开始以为 通配符匹配 就是类似于 BZOJ 4259: 残缺的字符串 ...

  5. 自学Linux Shell5.2-shell内建命令history alias

    点击返回 自学Linux命令行与Shell脚本之路 5.2-shell内建命令history alias 外部命令:有时称为文件系统命令,是存在于bash shell之外的程序,通常位于/bin./u ...

  6. 自学Python3.2-函数分类(内置函数)

    自学Python之路-Python基础+模块+面向对象自学Python之路-Python网络编程自学Python之路-Python并发编程+数据库+前端自学Python之路-django 自学Pyth ...

  7. [luogu2144][bzoj1002][FJOI2007]轮状病毒【高精度+斐波那契数列+基尔霍夫矩阵】

    题目描述 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道.如下图所示 N轮状病 ...

  8. 部署kubernetes1.8.4+contiv高可用集群

    原理和架构图参考上一篇,这里只记录操作步骤.由于东西较多,篇幅也会较长. etcd version: 3.2.11 kube version: 1.8.4 contiv version: 1.1.7 ...

  9. eureka集群的两种配置方式:配置文件方式与DNS方式

    eureka client获取serviceUrls(eureka server地址)列表的过程: 1. 根据use-dns-for-fetching-service-urls属性判断是从dns还是从 ...

  10. C# 面向对象的封装、继承、多态

    一.封装: 封装:把客观的事物封装成类,使用和修改方便: 作用和结构体使用方法相似,程序执行流程不同: 要点:成员变量,属性,成员方法,构造函数,成员方法的静态和非静态,命名空间,常用的访问修饰符pu ...