狀壓好題啊。
一眼看出時間複雜度 \(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 ...