正题

题目链接:https://www.luogu.com.cn/problem/P5369


题目大意

一个数列\(a\)的权值定义为\(max\{\sum_{i=1}^ka_i\}(k\in[1,n])\)

给出\(n\)个数字,求它们所有排列的权值和

\(1\leq n\leq 20\)


解题思路

设\(s_i,f_i,g_i\)分别表示集合\(i\)的权值和,集合\(i\)的所有排列中最大前缀和为\(s_i\)的方案数,集合\(i\)的所有排列中的最大前缀和为负的方案数。那么答案就是

\[\sum_{i=0}^{2^n-1} f_is_ig_{2^n-1-i}
\]

\(s_i\)很好求。\(g_i\)的话我们只转移\(s_i<0\)的就可以了,\(f_i\)的话我们考虑每次在前面插入一个数,那么只要原来的是最大前缀和,那么插入之后也一定是。

时间复杂度\(O(2^nn)\)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=21,P=998244353;
int n,a[N],lg[1<<N],s[1<<N],f[1<<N],g[1<<N],ans;
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++)scanf("%d",&a[i]);
for(int i=0;i<n;i++)lg[1<<i]=i;
int MS=(1<<n);f[0]=g[0]=1;
for(int i=1;i<MS;i++){
int p=i&-i;
s[i]=(s[i-p]+a[lg[p]])%P;
}
for(int i=0;i<MS;i++){
if(s[i]<0)continue;
for(int j=0;j<n;j++){
if(i&(1<<j))continue;
(f[i|(1<<j)]+=f[i])%=P;
}
}
for(int i=0;i<MS;i++){
for(int j=0;j<n;j++){
if(i&(1<<j))continue;
int z=i|(1<<j);
if(s[z]<0)(g[z]+=g[i])%=P;
}
}
for(int i=0;i<MS;i++)
(ans+=1ll*f[i]*g[MS-1-i]%P*s[i]%P)%=P;
printf("%d\n",(ans+P)%P);
return 0;
}

最新文章

  1. VS2012中,C# 配置文件读取 + C#多个工程共享共有变量 + 整理using语句
  2. 解决PHP生成UTF-8编码的CSV文件用Excel打开乱码的问题
  3. *[hackerrank]ACM ICPC Team
  4. 5.0:Spring-bean的加载
  5. Error starting static Resources java.lang.IllegalArgumentException: Document base D:\Program Files\apache-tomcat-xxx\webapps\xxx does not exist or is not a readable directory
  6. [XML] C#XMLProcess操作Xml文档的帮助类 (转载)
  7. MVC+MEF+UnitOfWork+EF架构,网站速度慢的原因总结!(附加ANTS Memory Profiler简单用法)
  8. 最少换乘(Dijkstra)
  9. POJ 1426 Find The Multiple BFS
  10. 跟着刚哥梳理java知识点——异常(十一)
  11. Android实训案例(一)——计算器的运算逻辑
  12. 深入理解Linux内核 学习笔记(1)
  13. Numpy库的学习(五)
  14. 「JavaScript面向对象编程指南」对象
  15. 2019 蓝桥杯省赛 A 组模拟赛(一)-忽明忽暗
  16. kindle 安卓 app下载的电子书放在什么文件夹?
  17. 如何快速定位找出SEGV内存错误的程序Bug
  18. Kivy 从memory 读取image
  19. C#中使用 SendMessage 向非顶端窗体发送组合键
  20. js最简单的动画

热门文章

  1. 轻松让你的nginx服务器支持HTTP2协议
  2. SQL server多表联合查询
  3. .NET Core:处理全局异常
  4. spring4整合hibernate5以及出现的问题解决办法
  5. C++多态中虚函数表合并与继承问题
  6. WPF---样式(一)
  7. 【springcloud】一文带你搞懂API网关
  8. jQuery中的样式(七):addClass()、removeClass()、toggleClass()、hasClass()、css()、width()、height()等
  9. 一招解决下载或下拉GitHub项目速度太慢的问题
  10. win7上帝模式详解