洛谷 P2123 皇后游戏

题目链接

洛谷 P2123 皇后游戏

分析

显然 cn 为最大值。

考虑使用邻项微扰,原本的第 n1 项编号为 i,第 n 项编号为 j。设前 n2 项的 ak 之和为 s

交换前,

cn1=max(cn2,s+ai)+bi=max(cn2+bi,s+ai+bi),cn=max(cn1,s+ai+aj)+bj=max(cn2+bi+bj,s+ai+bi+bj,s+ai+aj+bj)

交换后,cn=max(cn2+bi+bj,s+aj+bi+bj,s+ai+aj+bi)

若交换不会使得答案变得更优,即 cncn

max(cn2+bi+bj,s+ai+bi+bj,s+ai+aj+bj)max(cn2+bi+bj,s+aj+bi+bj,s+ai+aj+bi)max(s+ai+bi+bj,s+ai+aj+bj)max(s+aj+bi+bj,s+ai+aj+bi)max(ai+bi+bj,ai+aj+bj)max(aj+bi+bj,ai+aj+bi)ai+bj+max(bi,aj)aj+bi+max(bj,ai)ai+bjmax(bj,ai)aj+bimax(bi,aj)min(bj,ai)min(bi,aj)

这并不是一个合格的 偏序关系,因为没有 传递性,所以不能直接套用该关系作为比较函数进行排序。

进一步地推导,可以将该关系抽象为 ai=min(ai,bi,aj,bj)bj=min(ai,bi,aj,bj)

将数据分成下标统一的两组 (ai,bi),(aj,bj),只需要比较两组之间的最小值即可。

1. aibi,ajbj

aiaj,则 ai=min(ai,bi,aj,bj);否则 aj=min(ai,bi,aj,bj)

2. aibi,ajbj

最小值一定为 ai,bj 之一,令 ij 前。

3. aibi,ajbj

最小值一定为 aj,bi 之一,令 ji 前。

4. aibi,ajbj

bibj,则 bj=min(ai,bi,aj,bj);否则 bi=min(ai,bi,aj,bj)

这样一来,我们把整个序列分成两块,前面一块为 aibi,后面一块为 ai>bi;在块中的关系具有传递性。按照这种比较方式进行排序,可以确保 pi<pj,min(bj,ai)min(bi,aj)pii 所在位置。

代码

#include <iostream>
#include <algorithm>
#include <ctime>
#include <string>
#include <vector>
#include <cmath>
using namespace std;
typedef long long ll;
const int maxn=2e5+10;
const ll INF=1LL<<60;
struct node {
	int x,y;
    bool s;
	bool operator<(const node &b)const{
        if (s!=b.s)
            return s;
		return s?x<b.x:y>b.y;
	}
}p[maxn];
int read() {
	int res=0,p=1;
	char ch=getchar();
	while(!isdigit(ch)) {
		if (ch=='-')
			p=-1;
		ch=getchar();
	}
	while(isdigit(ch))
		res=res*10+ch-'0',ch=getchar();
	return res*p;
}
int main() {
    int T=read();
    while (T--) {
        int n=read();
        for (int i=1;i<=n;i++)
            p[i].x=read(),p[i].y=read(),p[i].s=p[i].x<=p[i].y;
        sort(p+1, p+1+n);
        ll ans=p[1].x+p[1].y,sum=p[1].x;
        for (int i=2;i<=n;i++) {
            sum+=p[i].x;
            ans=max(ans, sum)+p[i].y;
        }
        cout<<ans<<endl;
    }
	return 0;
}
posted @   hkr04  阅读(33)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示