日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ATcoder-[AGC048B]Bracket Score【结论,贪心】

發(fā)布時(shí)間:2023/12/3 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ATcoder-[AGC048B]Bracket Score【结论,贪心】 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

正題

題目鏈接:https://atcoder.jp/contests/agc048/tasks/agc048_b


題目大意

長度為nnn的合法括號序列可以包含[...][...][...](...)(...)(...)

如果在第iii個(gè)位置是′(′'\ (\ '?(? 或者 ′)′'\ )\ '?)?那么可以獲得aia_iai?的權(quán)值,否則獲得bib_ibi?的權(quán)值。

求一個(gè)合法的括號序列使得權(quán)值最大。


解題思路

首先對于每對匹配的括號肯定是一奇一偶的,有一個(gè)結(jié)論就是只要兩種括號的奇和偶數(shù)上括號的個(gè)數(shù)相同,那么就一定有一種合法匹配。

大致的理解方法就是,對于每一種方案至少存在一對相鄰的同種括號,否則就不滿足以上性質(zhì),然后就可以將這對括號刪去。重復(fù)以上過程就可以證明該結(jié)論

那么考慮貪心選取,對于每個(gè)位置我們先默認(rèn)選擇小括號,那么如果轉(zhuǎn)換的話就會(huì)獲得wi=ai?biw_i=a_i-b_iwi?=ai??bi?的價(jià)值。然后每次選取一奇一偶的wiw_iwi?,把奇偶的wiw_iwi?分開排序選取即可。

時(shí)間復(fù)雜度O(nlog?n)O(n\log n)O(nlogn)


codecodecode

#include<cstdio> #include<cstring> #include<algorithm> #include<vector> #define ll long long using namespace std; const ll N=1e5+10; ll n,a[N],b[N],sum,ans; vector<ll > v[2]; int main() {scanf("%lld",&n);for(ll i=1;i<=n;i++)scanf("%lld",&a[i]);for(ll i=1;i<=n;i++)scanf("%lld",&b[i]),sum+=b[i];for(ll i=1;i<=n;i++)v[i&1].push_back(a[i]-b[i]);sort(v[0].begin(),v[0].end());sort(v[1].begin(),v[1].end());ans=sum;for(ll i=v[0].size()-1;i>=0;i--)sum+=v[0][i]+v[1][i],ans=max(ans,sum);printf("%lld\n",ans); }

總結(jié)

以上是生活随笔為你收集整理的ATcoder-[AGC048B]Bracket Score【结论,贪心】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。