P5369 PKUSC2018 最大字首和

2022-05-11 14:20:32 字數 770 閱讀 6445

p5369

題意:求所有排列下的最大字首和之和

一步轉化: 求最大字首和的字首由數集s組成的方案數, 統計答案時直接乘上sum(s)即可

考慮最大字首和的性質:

設最大字首和為sum[i]

到i的字尾均為正數

i後的字首均為負數

令sum[i] = 集合 i 內所有數的和。

令f[i] = 集合 i內的數組成的排列,最大字首和 = sum[i]的方案數。

令g[i] = 集合 i內的數組成的排列,所有的最大字首和都 < 0 的方案數。

**:

#include#include#includeusing namespace std;

const int n = 25;

const int p = 998244353;

int n, a[n];

int f[1050050], g[1050050];

int sum[1050050];

inline int to(int x)

int main()

else

} long long ans = 0;

for (int i = 1;i <= all; i++)

ans = (ans + (long long)f[i] * g[all^i] % p * sum[i] % p) % p;

cout << (ans % p + p) % p << endl;

return 0;

}

BZOJ5369 Pkusc2018 最大字首和

time limit 20 sec memory limit 512 mb 小c是乙個演算法競賽愛好者,有一天小c遇到了乙個非常難的問題 求乙個序列的最大子段和。但是小c並不會做這個題,於是小c決定把序列隨機打亂,然後取序列的最大字首和作為答案。小c是乙個非常有自知之明的人,他知道自己的演算法完全不...

PKUSC2018 最大字首和

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

PKUSC2018 最大字首和(狀壓dp)

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