LOJ6433 PKUSC2018 最大前缀和 状压DP

传送门


考虑枚举最大前缀和最后一次出现的位置,那么在此之后的序列的最大前缀和必须小于\(0\)这个最大前缀和才是合法的。

\(sum_i\)表示集合\(i\)的权值和,\(f_i\)表示将集合\(i\)中的元素进行排列使得最大前缀和为\(sum_i\)的方案数,\(g_i\)表示将集合\(i\)中的元素进行排列使得最大前缀和小于\(0\)的方案数

对于\(g_i\)转移很简单,枚举最后一个元素即可;对于\(f_i\),最开始只会\(3^n\)……可以考虑枚举第一个元素,如果之后的元素之和小于\(0\)则一定不合法,否则需要之后的元素构成的序列的最大前缀和是之后序列的和,也就可以\(O(2^nn)\)地转移了。

最后答案就是\(\sum\limits_{i=0}^{2^n-1} sum_if_ig_{2^n-1-i}\)

代码

posted @ 2019-05-29 19:45 CJOIer_Itst 阅读(...) 评论(...) 编辑 收藏