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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CF1415E New Game Plus(贪心)

發(fā)布時間:2023/12/3 编程问答 61 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CF1415E New Game Plus(贪心) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

解析

把題目標簽寫在數(shù)據(jù)范圍上的一道題
由于k過大,顯然無法dp
那就只能貪了

一開始被完全帶跑偏了…
想的是把序列降序排列然后從后往前劃分…
這個思路能很簡單的寫出nkdp
然后就卡住了…
算看了一半題解吧
看到第一段“考慮分成k組”后退出來了
有了這個線頭后面就非常順
以后還是要努力培養(yǎng)在推不出好的性質(zhì)時打破第一印象的能力

考慮正解
清零k次等價于把boss分成不多于k組
每次把新元素加入的同時獲得原來集合內(nèi)元素和的代價
所以只需要維護集合的元素和即可

考慮把所有集合放入大根堆
降序加入元素
顯然正的元素直接全放一組是最好的

如果現(xiàn)在是負的元素
如果堆頂還是正的那就加進去,不難發(fā)現(xiàn),因為后面的元素更小,這樣能盡可能讓這個集合發(fā)揮余熱(性感理解一下),肯定還是好的
如果堆頂負了我們就盡可能的讓新元素成為一個新的集合
感性理解一下,在啥都是負的時候,我們肯定是讓所有的元素從大到小蛇形分布,這樣使產(chǎn)生貢獻的元素都是相對負的不厲害的
如果極小值全塞到一起肯定是不好的
(為什么我的貪心分析全是感性理解啊qwq)

代碼

#include<bits/stdc++.h> const int N=1e6+100; const int mod=1e9+7; #define ll long long using namespace std; inline ll read() {ll x(0),f(1);char c=getchar();while(!isdigit(c)) {if(c=='-')f=-1;c=getchar();}while(isdigit(c)) {x=(x<<1)+(x<<3)+c-'0';c=getchar();}return x*f; }int n,m; ll a[N],ans; bool cmp(ll x,ll y){return x>y; } priority_queue<ll>q; int main(){n=read();m=read();++m;for(int i=1;i<=n;i++) a[i]=read();sort(a+1,a+1+n,cmp);for(int i=1;i<=n;i++){ll x=a[i];if(q.empty()||(q.top()<0&&(signed)q.size()<m)){q.push(x);}else{ll o=q.top();q.pop();ans+=o;o+=x;q.push(o);}}printf("%lld\n",ans); } /* 1 281239 */

總結

以上是生活随笔為你收集整理的CF1415E New Game Plus(贪心)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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