好题。

网上看到的范围是:\(T \leq 10\),$ n \leq 50000$, $ a_i,b_i \leq 10^9$。

我们按照贪心惯常的思路考虑交换相邻的两个人。容易发现,对于相邻的两个人,总是后一个人的答案更大一点。而我们的目的,是让两个人中后一个人的答案更小(这样可以让这两个人后面的答案更小)。

设当前在考虑 \(i\) 与\(i+1\)。记前\(i-1\)号的和为\(sum\)。欲使后面的人答案更小一点,假设\(i\)在前是后面的人答案更小一点,则有

\[\max(\max(sum+a_i,c_{i-1})+b_i, sum+a_i+a_{i+1})+b_{i+1}
\]

\[\max(\max(sum+a_{i+1},c_{i-1})+b_{i+1}, sum+a_i+a_{i+1})+b_i
\]

前者小于后者。

将它们合并到一个max里头,有

\[\max(sum+a_i+b_i+b_{i+1}, c_{i-1}+b_i+b_{i+1}, sum+a_i+a_{i+1}+b_{i+1})
\]

\[\max(sum+a_{i+1}+b_i+b_{i+1}, c_{i-1}+b_i+b_{i+1}, sum+a_i+a_{i+1}+b_i)
\]

前者小于后者。

发现第二项相同,可以同时抛去。(想不通的话想一想$ \max(a, 1)<\max(b, 1)$是怎么回事就好了)

得到

\[\max(sum+a_i+b_i+b_{i+1}, sum+a_i+a_{i+1}+b_{i+1})
\]

\[\max(sum+a_{i+1}+b_i+b_{i+1}, sum+a_i+a_{i+1}+b_i)
\]

前者小于后者。

同时抛去 \(sum\) 得到

\[\max(a_i+b_i+b_{i+1}, a_i+a_{i+1}+b_{i+1})
\]

\[\max(a_{i+1}+b_i+b_{i+1}, a_i+a_{i+1}+b_i)
\]

前者小于后者。

同时减去$ a_i+a_{i+1}+b_i+b_{i+1}$得到

\[\max(-a_{i+1}, -b_i)<max(-a_i, -b_{i+1})
\]

化开得到

\[\min(a_i, b_{i+1})<\min(a_{i+1}, b_i)
\]

这就是排序条件。

然后就很简单啦qwq。

#include <algorithm>
#include <iostream>
#include <cstdio>
using namespace std;
struct Node{
long long aa, bb;
}nd[50005];
int T, n;
long long dp[50005], sum;
bool cmp(Node x, Node y){
return min(x.aa, y.bb)<min(y.aa, x.bb);
}
int main(){
cin>>T;
while(T--){
scanf("%d", &n);
for(int i=1; i<=n; i++)
scanf("%lld %lld", &nd[i].aa, &nd[i].bb);
sort(nd+1, nd+1+n, cmp);
sum = dp[0] = 0;
for(int i=1; i<=n; i++){
sum += nd[i].aa;
dp[i] = max(dp[i-1], sum) + nd[i].bb;
}
printf("%lld\n", dp[n]);
}
return 0;
}

luogu2123 皇后游戏的更多相关文章

  1. P2123 皇后游戏

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

  2. [洛谷P2123]皇后游戏

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

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

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

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

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

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

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

  6. luoguP2123 皇后游戏(贪心)

    luoguP2123 皇后游戏(贪心) 题目 洛谷题目chuanso 题解 有一篇好题解,我就懒得推式子了,毕竟打到电脑上还是很难的 牛逼题解传送门 code #include<iostream ...

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

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

  8. luogu P2123 皇后游戏

    传送门 跟国王游戏一样的分析 考虑相邻的两个大臣,设他们前面的\(\sum a_j\)为\(s\),同时注意到后面人的贡献更大 所以\(i\)在前面时,\(c_j=\max(\max(c_{last} ...

  9. CH模拟赛 皇后游戏

    /* 做的时候手推了一下n=2的四种情况,再排一下序就可以了,证明不是很严谨,但我想这就行了,毕竟全是套路 */ #include<iostream> #include<cstdio ...

随机推荐

  1. storm中的topology-worker-executor-task

    调度角色 调度方法 自定义调度 1 调度角色   任务角色结构 上图是JStorm中一个topology对应的任务执行结构,其中worker是进程,executor对应于线程,task对应着spout ...

  2. Rest_framework之版本控制、响应器和分页器

    一.访问频率补充 频率: 自定义: 1 定义一个类MyThrottles allow_request(频率限制的逻辑) ==>这两个函数都是派生出来的,继承的类里面封装的. wait(返回一个数 ...

  3. -oN ,-oX,-oG

    -oN ,正常输出 -oX, xml输出 nmap  192.168.9.12 -oX TEST.xml -oG grep输出 html文件可读性比xml文件要好,将xml转换成html     xs ...

  4. Nginx服务器301跳转到带www的域名的方法

    为什么要这么做? 我们的域名在做解析时经常会解析2个域名,即带www的和不带www的.这样做的目的是,当用户使用不带www的域名时,也可以正常访问你的网站.但是这样做的后果是,你站点主域名的PR值分散 ...

  5. Exchange 用户邮箱导入/导出

    在第2部分中,我将向您介绍如何使用Exchange Server中提供的新cmdlet导入/导出数据,以及如何查看导入和导出的信息统计信息这样做. 走起! 将数据从PST文件导入到邮箱 现在是时候尝试 ...

  6. Win10自动安装游戏/应用

    近日有一些网友反馈Win10会自动安装一些游戏/应用.用户没有打开应用商店并且没有被要求获取批准,系统自动在系统中安装了一些应用. 比如有这样一位网友反馈了该问题,他在自己的系统中使用命令卸载了所有的 ...

  7. UVA1607 Gates 与非门电路 (二分)

    题意:给你一个按发生时间的序列,表示与非门电路的输入,一开始全部输入是x,现在要改成尽量少的x,实现相同的功能. 题解:电路功能只有4中0,1,x,非x.那么如果一开始x改变了,输出结果不变,那么说明 ...

  8. ACM博弈论基础

    博弈论的题目有如下特点: 有两名选手 两名选手交替操作,每次一步,每步都在有限的合法集合中选取一种进行 在任何情况下,合法操作只取决于情况本身,与选手无关 游戏败北的条件为:当某位选手需要进行操作时, ...

  9. iBatis for Net 代码生成器(CodeHelper)附下载地址(已经升级为V 1.1)

    CodeHelper是一款可以自己定义模板和生成内容的代码生成器,目前只支持MsSql数据库,这款代码生成器的初衷也只是为了生成MyBatis.net框架的配置文件而写的一个轻量级的代码生成器. Co ...

  10. 10分钟搞懂toString和valueOf函数(详细版)

    首先要说明的是这两种方法是toPrimitive抽象操作里会经常用到的. 默认情况下,执行这个抽象操作时会先执行valueOf方法,如果返回的不是原始值,会继续执行toString方法,如果返回的还不 ...