洛谷 Codeforces CF865D 題解

2022-05-12 06:48:10 字數 1093 閱讀 2062

若想要深入學習反悔貪心,傳送門。

description:

已知接下來 \(n\) 天的****,每天可以**當天的**,賣出已有的**,或者什麼都不做,求 \(n\) 天之後最大的利潤。

method

我們可以快速想出一種貪心策略:****最小的**,在可以賺錢的當天賣出。

顯然我們可以發現,上面的貪心策略是錯誤的,因為我們**的**可以等到可以賺最多的當天在賣出。

我們考慮設計一種反悔策略,使所有的貪心情況都可以得到全域性最優解。(即設計反悔自動機的反悔策略)

定義 \(c_\) 為全域性最優解中**當天的**, \(c_\) 為全域性最優解中賣出當天的**,則:

\[c_-c_=\left(c_-c_i\right)+\left(c_i-c_\right)

\]\(c_i\) 為任意一天的****。

即我們買**最小的**去賣**最大的**,以期得到最大的利潤。我們先把當前的**放入小根堆一次(這次是以上文的貪心策略貪心),判斷當前的**是否比堆頂大,若是比其大,我們就將差值計入全域性最優解,再將當前的**放入小根堆(這次是反悔操作)。相當於我們把當前的****若不是最優解,就沒有用,最後可以得到全域性最優解。

上面的等式即被稱為反悔自動機的反悔策略,因為我們並沒有反覆更新全域性最優解,而是通過差值消去中間項的方法快速得到的全域性最優解。

(假如還沒有理解這道題,可以看一看**,有詳細的注釋)

code:

#include#define int long long 

using namespace std;

inline void read(int &x)

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

x*=f;

}priority_queue,greater>qu;//開乙個小根堆

int n;

int ans=0;//全域性最優解

signed main()

}printf("%lld\n",ans);//輸出全域性最優解

return 0;

}

洛谷打卡Day 8

題目描述 這次期末考試,kkksc03 需要考 4 科。因此要開始刷習題集,每科都有乙個習題集,分別有 s1,s2,s3,s4道題目,完成每道題目需要一些時間,可能不等 a1,a2,b1,b2,bs,c1,c2,cs,d1,d2,ds kkksc03 有乙個能力,他的左右兩個大腦可以同時計算 2 道...

洛谷八連測 R8

題目鏈結 答案是求c1 x 1 ck 1 n 1 ckn x 取得最大值時的x值。數學題。化簡,求單調性。對每一門成績都建一棵樹。每條邊都加一條反向邊。能夠通過正向邊到達的點都是比自己成績低的,反向邊則是比自己高的。最好成績是只有三門成績蒐比自己高時才比自己高。最壞成績是只有三門都比自己低時才比自己...

洛谷 桌球

國際乒聯現在主席沙拉拉自從上任以來就立志於推行一系列改革,以推動桌球運動在全球的普及。其中111111分制改革引起了很大的爭議,有一部分球員因為無法適應新規則只能選擇退役。華華就是其中一位,他退役之後走上了桌球研究工作,意圖弄明白111111分制和212121分制對選手的不同影響。在開展他的研究之前...