luogu P2123 皇后遊戲

2022-02-05 06:36:20 字數 1658 閱讀 6426

傳送門

跟國王遊戲一樣的分析

考慮相鄰的兩個大臣,設他們前面的\(\sum a_j\)為\(s\),同時注意到後面人的貢獻更大

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

\(j\)在前面時,\(c_i=\max(\max(c_,s+a_j)+b_j,s+a_i+a_j)+b_i\)

如果最優方案裡\(i\)在\(j\)前面,則剛才的\(c_j

即$$\max(\max(c_,s+a_i)+b_i,s+a_i+a_j)+b_j<\max(\max(c_,s+a_j)+b_j,s+a_i+a_j)+b_i$$$$\max(c_+b_i+b_j,s+a_i+b_i+b_j,s+a_i+a_j+b_j)<\max(c_+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的,就按\(a\)公升序排序

對於所有\(a>b\)的,就按\(b\)降序排序

\(a=b\)好像是用腳隨便放( 就直接和第一種情況合併救星了

對於所有情況,考慮\(a_ib_j\),根據\(\min(a_i,b_j)<\min(a_j,b_i)\),則顯然是把\(a的放在\(a>b\)的之前

總結:記\(d_i=\min(a_i,b_i)\)然後對三元組\(\\)按\(d_i\)公升序排序,然後如果\(a_i=d_i\)放前面,否則放後面

#include#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()

while(ch>='0'&&ch<='9')

return x*w;

}struct nn

}z[n];

ll n,a[n],b[n],c[n];

int main()

sort(z+1,z+n+1);

for(int i=1,l=1,r=n;i<=n;i++)

c[1]=a[1]+b[1];

ll su=a[1];

for(int i=2;i<=n;i++)

printf("%lld\n",c[n]);

}return 0;

}

luoguP2123 皇后遊戲 貪心

洛谷題目chuanso 有一篇好題解,我就懶得推式子了,畢竟打到電腦上還是很難的 牛逼題解傳送門 include include include include include include include include include include include define rg reg...

洛谷 P2123 皇后遊戲(貪心)

還記得 noip 2012 提高組 day1 的國王遊戲嗎?時光飛逝,光陰荏苒,兩年 過去了。國王遊戲早已過時,如今已被皇后遊戲取代,請你來解決類似於國王遊 戲的另乙個問題。皇后有 n 位大臣,每位大臣的左右手上面分別寫上了乙個正整數。恰逢國慶 節來臨,皇后決定為 n 位大臣頒發獎金,其中第 i 位...

貪心 洛谷P2123 皇后遊戲

給定一種結構體陣列,其包含 a a 陣列和b role presentation b b陣列,定義一種陣列 c c 其公式為 拭排列此結構體的順序使得c n c n 最小化 這道題用貪心,我們可以像證明國王遊戲一樣,用微擾的方法證明貪心的正確性 luogu judger enable o2 incl...