PKUSC2018 最大字首和(狀壓dp)

2022-04-29 22:54:13 字數 631 閱讀 7115

狀壓好題啊。

一眼看出時間複雜度 \(o(n2^n)\),然後開始想正解。

然後設 \(dp_i\) 為字首狀態為 \(i\) 時的方案數,所以這時候 \(sum_i\) 一定是單峰的。

可以推導出:

\[(1\leq j

\[(i

那麼我們相當於求兩個序列拼湊起來,乙個序列字首和除第一項始終 \(\geq 0\)(因為 \(sum_i-sum_1\) 不包括第一項,但是 \(sum_n-sum_i\) 包括最後一項),乙個字首和始終 \(<0\)。\(f_i\) 表示字首和為負數的,\(g_i\) 表示字首和為正數的,那麼 \(g_i\) 拼湊時 \(i>0\)。每乙個狀態對於答案的貢獻為 \(g_i\times f_\times (sum_i+p)\%p\)

時間複雜度 \(o(n2^n)\)

\(code\ below:\)

#include #define ll long long

using namespace std;

const int p=998244353;

int n,lim,a[20],sum[1<<20],f[1<<20],g[1<<20];

int main()

PKUSC2018 最大字首和

看資料範圍認解法 首先在每種情況出現概率相同的情況下,期望 times 方案數 權值和 即題意就是讓你求所有排列的最大字首和的總和 我們可以列舉哪些數是最大字首,顯然這些數內部任意交換順序 其它數內部任意交換順序 都不會改變這個最大字首。一些數要排到前面去成為最大字首,條件是該字首除整段外的所有字尾...

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 ...