PKUSC2018 最大字首和

2022-05-02 03:42:06 字數 882 閱讀 9240

看資料範圍認解法

首先在每種情況出現概率相同的情況下, \(期望 \times 方案數 = 權值和\),即題意就是讓你求所有排列的最大字首和的總和……

我們可以列舉哪些數是最大字首,顯然這些數內部任意交換順序、其它數內部任意交換順序 都不會改變這個最大字首。

一些數要排到前面去成為最大字首,條件是該字首除整段外的所有字尾和 \(\gt 0\)(因為最大字首長度不能是 \(0\)),後面的所有字首和 \(\le 0\)。

(乙個 \(\gt 0\),乙個 \(\le 0\) 是因為對於一種排列,若有多個字首和均為最大,我們只根據最短的字首統計一次該排序。也可以根據最長的字首,即乙個 \(\ge 0\),乙個 \(\lt 0\))

設 \(f(i)\) 表示集合 \(i\) 的數有多少種排列滿足所有字尾和 \(\gt 0\),\(g(i)\) 表示集合 \(i\) 的數有多少種排列滿足所有字首和 \(\le 0\)。

\(f\) 的轉移是每次往前加乙個數,\(g\) 的轉移是每次往後加乙個數。加乙個數隻需要判斷一下新後/字首和是否滿足條件。

最後把 \(f\) 和 \(g\) 卷起來就好了。

#include#define ll long long

#define n 1048580

#define mod 998244353

using namespace std;

inline int read()

int n,nn,f[n],g[n],ans; ll sum[n];

inline int lowbit(int x)

inline void upd(int &x, int y)

int main()

PKUSC2018 最大字首和(狀壓dp)

狀壓好題啊。一眼看出時間複雜度 o n2 n 然後開始想正解。然後設 dp i 為字首狀態為 i 時的方案數,所以這時候 sum i 一定是單峰的。可以推導出 1 leq j i 那麼我們相當於求兩個序列拼湊起來,乙個序列字首和除第一項始終 geq 0 因為 sum i sum 1 不包括第一項,但...

PKUSC2018 最大字首和(狀壓DP)

題目大意 求給定的 n 個數的所有排列的最大字首和 不能為空 之和對 10 9 7 取模的值。1 le n le 20,1 le sum a i le 10 9 神級dp。雜題選講的神級毒瘤講題人cdw講的。考慮乙個集合 s 能作為最大字首和出現的方案數。即貢獻係數 發現前 s 個數滿足最大字首和是...

PKUSC 2018 真實排名

戳我 我們將現在所要進行的數設為 now 我們分情況討論一下 他自己不翻倍 他自己翻倍 我們首先來看看 1 操作 如果要滿足他對排名沒有影響,那麼不能進行翻倍的數只有 lceil frac rceil,now 我考場上不知道在幹嗎,寫的是能進行翻倍的數,麻煩好多,常數也大 我們假設這一段為 cnt ...