这个期望显然是诈骗,即统计每种排列最大前缀和之和。
对于某个排列 \(a\),令 \(s(l,r)=\sum\limits_{k=l}^ra_k\)。考虑前缀 \([1,i]\) 成为答案的充要条件:
- \(\forall 1<j\le i,s(j,i)\ge 0\),否则可以去掉这段。
- \(\forall j>i,s(i+1,j)<0\),否则加上这段不劣(钦定取的是最大并且最靠后的前缀)。
那么可以考虑状压,设 \(f_S\) 为选择 \(S\) 这个集合作为 \([i+1,n]\) 并且满足第 \(2\) 个条件的方案数,设 \(g_S\) 为选择 \(S\) 这个集合作为 \([2,i]\) 并且满足第 \(1\) 个条件的方案数。转移的话就考虑哪个数塞到开头/结尾即可。
统计答案时枚举第 \(1\) 位填 \(a_i\),然后枚举集合 \(S\) 作为合法的前缀,计算方案数用 \(g_S\) 乘 \(f_{U\setminus (S\cup\{i\})}\) 即可,即:
\[\text{ans}=\sum\limits_{i=1}^n\sum\limits_{S\subseteq U\setminus\{i\}}\left(\sum\limits_{k\in S\cup\{i\}}a_k\right)g_Sf_{U\setminus(S\cup \{i\})} \]复杂度 \(O(n2^n)\)。
标签:前缀,limits,cup,sum,setminus,PKUSC2018,最大 From: https://www.cnblogs.com/Ender32k/p/17569332.html