bzoj 5369: [Pkusc2018]最大前缀和

Description

小C是一个算法竞赛爱好者,有一天小C遇到了一个非常难的问题:求一个序列的最大子段和。
但是小C并不会做这个题,于是小C决定把序列随机打乱,然后取序列的最大前缀和作为答案。
小C是一个非常有自知之明的人,他知道自己的算法完全不对,所以并不关心正确率,他只关心求出的解的期望值,
现在请你帮他解决这个问题,由于答案可能非常复杂,所以你只需要输出答案乘上n!后对998244353取模的值,显然这是个整数。
注:最大前缀和的定义:i∈[1,n],Sigma(aj)的最大值,其中1<=j<=i

Solution

注意到前缀和的取值只有 \(2^n\) 种.
然后可以枚举每一个集合的元素当最大前缀和 , 那么这个集合的元素排列之后每一个后缀都必须大于 \(0\) , 且这个集合的补集排列之后必须保证每一个前缀和都小于 \(0\).
那么状压 \(DP\) 就行了 , 设 \(f[i]\) 表示集合 \(i\) 作为最大前缀和且排列之后每个后缀都大于 \(0\) 的方案数 , \(g[i]\) 表示集合 \(i\) 中元素排列之后每个前缀都小于 \(0\) 的方案数.
强制 \(f,g\) 必须在合法的时候才能转移就行了.

#include<bits/stdc++.h>
using namespace std;
const int N=25,mod=998244353;
int f[1<<20],n,a[N],m,g[1<<20],sum[1<<20];
int main(){freopen("pp.in","r",stdin);freopen("pp.out","w",stdout);cin>>n,m=(1<<n)-1;for(int i=0;i<n;i++)cin>>a[i];for(int i=0;i<n;i++)for(int j=0;j<=m;j++)if(j>>i&1)sum[j]+=a[i];for(int i=0;i<n;i++)f[1<<i]=1,g[1<<i]=1;for(int i=0;i<=m;i++){if(sum[i]>0){for(int j=0;j<n;j++)if(~i>>j&1)f[i^(1<<j)]=(f[i^(1<<j)]+f[i])%mod;}else{for(int j=0;j<n;j++)if(~i>>j&1)g[i^(1<<j)]=(g[i^(1<<j)]+g[i])%mod;}}g[0]=1;int ans=0;for(int i=0;i<=m;i++)if(sum[m^i]<=0)ans=(ans+1ll*f[i]*sum[i]%mod*g[m^i])%mod;cout<<(ans+mod)%mod;return 0;
}

转载于:https://www.cnblogs.com/Yuzao/p/9304011.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/452002.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微软:软件帝王的复兴之路

可以说在过去的两个月IT界所发生的一切都非同寻常&#xff0c;乔布斯辞职了&#xff0c;Google把Motorola并购了&#xff0c;微软炫了一下Windows 8&#xff0c;还宣布开始用ARM了&#xff0c;Google开始和英特尔合作了&#xff0c;AT&T与T-Mobile的并购也在紧密锣鼓进行中…

jdbc和odbc区别

ODBC(Open Database Connectivity&#xff0c;开放数据库互连)是微软公司开放服务结构(WOSA&#xff0c;Windows Open Services Architecture)中有关数据库的一个组成部分&#xff0c;它建立了一组规范&#xff0c;并提供了一组对数据库访问的标准API&#xff08;应用程序编程接…

事务相关、不可重复读与幻读的区别

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 事务内嵌套事务&#xff1a; 1) 都用spring事务时&#xff0c;取决spring采用的事务的隔离级别。 这个默认隔离级别是与具体的数据…

onload事件

onload事件它只支持少量标签<body>, <frame>, <iframe>, <img>, <input type"image">, <link>, <script>, <style> 不支持<div>,<p>标签等 所以&#xff0c;在div使用onload事件时该怎么办呢。。。转载…

Eclipse GBK批量转UTF-8插件(转)

最近需要把Android项目转Android Studio&#xff0c;由于之前是eclipse开发&#xff0c;而且坑爹的是编码还是GBK的&#xff0c;转到Android Studio中文都是乱码&#xff0c;如果一个文件一个文件ctrlc的话&#xff0c;想想就累&#xff0c;几经Google&#xff0c;发现一个很好…

网络爬虫--15.【糗事百科实战】多线程实现

文章目录一. Queue&#xff08;队列对象&#xff09;二. 多线程示意图三. 代码示例一. Queue&#xff08;队列对象&#xff09; Queue是python中的标准库&#xff0c;可以直接import Queue引用;队列是线程间最常用的交换数据的形式 python下多线程的思考 对于资源&#xff0…

浅谈:国内软件公司为何无法做大做强?

纵览,国内比较大的软件公司(以下统一简称"国软"),清一色都是做政府项目的(他们能做大的原因我就不用说了吧),真正能做大的国软又有几家呢?这是为什么呢? 今天风吹就给大家简单分析下: 1."作坊"式管理 "作坊"往往是效率最高的,国软几乎都是从作…

Java SE、Java EE、Java ME三者的区别

说得简单点 Java SE 是做电脑上运行的软件。 Java EE 是用来做网站的-&#xff08;我们常见的JSP技术&#xff09; Java ME 是做手机软件的。 1. Java SE&#xff08;Java Platform&#xff0c;Standard Edition&#xff09;。Java SE 以前称为 J2SE。它允许开发和部署在桌面、…

FileBeats安装

FileBeats安装 FileBeats官方下载链接&#xff1a; https://www.elastic.co/downloads/beats/filebeat 也可以直接使用以下命令下载&#xff08;文章下载目录一概为/home/tools, 解压后文件夹放到 /home/apps下&#xff09; wget https://artifacts.elastic.co/downloads/beats…

《程序员代码面试指南》第三章 二叉树问题 二叉树节点间的最大距离问题

题目 二叉树节点间的最大距离问题 java代码 package com.lizhouwei.chapter3;/*** Description:二叉树节点间的最大距离问题* Author: lizhouwei* CreateDate: 2018/4/16 19:33* Modify by:* ModifyDate:*/ public class Chapter3_20 {public int maxDistance(Node head) {int[…

MySQL中函数CONCAT及GROUP_CONCAT 对应oracle中的wm_concat

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 一、CONCAT&#xff08;&#xff09;函数 CONCAT&#xff08;&#xff09;函数用于将多个字符串连接成一个字符串。 使用数据表Info作为…

网络爬虫--16.BeautifulSoup4

文章目录一. BeautifulSoup4二. 解析实例三. 四大对象种类1. Tag2. NavigableString3. BeautifulSoup4. Comment四. 遍历文档树1.直接子节点 &#xff1a;.contents .children 属性1). .contents2). .children2. 所有子孙节点: .descendants 属性3. 节点内容: .string 属性五. …

Intel MKL 多线程设置

对于多核程序&#xff0c;多线程对于程序的性能至关重要。 下面&#xff0c;我们将对Intel MKL 有关多线程方面的设置做一些介绍&#xff1a; 我们提到MKL 支持多线程&#xff0c;它包括的两个概念&#xff1a; 1>MKL 是线程安全的&#xff1a; MKL在设计时&#xff0c;就保…

【LA3415 训练指南】保守的老师 【二分图最大独立集,最小割】

题意 Frank是一个思想有些保守的高中老师。有一次&#xff0c;他需要带一些学生出去旅行&#xff0c;但又怕其中一些学生在旅行中萌生爱意。为了降低这种事情发生的概率&#xff0c;他决定确保带出去的任意两个学生至少要满足下面四条中的一条。 1.身高相差大于40厘米 2.性别相…

行车记录仪稳定方案:TC358778XBG:RGB转MIPI DSI芯片,M-Star标配IC

原厂&#xff1a;Toshiba型号&#xff1a;TC358778XBG功能&#xff1a;TC358778XBG是一颗将RGB信号转换成MIPI DSI的芯片&#xff0c;最高分辨率支持到1920x1200&#xff0c;其应用图如下&#xff1a;产品特征&#xff1a;MIPI接口&#xff1a;&#xff08;1&#xff09;、支持…

java.sql.SQLException: 无法转换为内部表示之解决

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 这个错是因为 数据库中字段类型和程序中该字段类型不一致。 比如程序将某字段当做Integer类型&#xff0c; 而数据库存储又使用另外一…

网络爬虫--17.【BeautifuSoup4实战】爬取腾讯社招

文章目录一.要求二.代码示例一.要求 以腾讯社招页面来做演示&#xff1a;http://hr.tencent.com/position.php?&start10#a 使用BeautifuSoup4解析器&#xff0c;将招聘网页上的职位名称、职位类别、招聘人数、工作地点、发布时间&#xff0c;以及每个职位详情的点击链接…

public static void main(String[] args)的理解

public:权限修饰符&#xff0c;权限最大。static:随着MianDemo类的加载而加载&#xff0c;消失而消失。void: 没有返回值main: 函数名&#xff0c;jvm识别的特殊函数名(String[] args):定义了一个字符串数组参数。这个字符串数组是保存运行main函数时输入的参数的

Miller-Rabin素数测试

Miller-Rabin素数测试 给出一个小于1e18的数&#xff0c;问它是否为质数&#xff1f;不超过50组询问。hihocoder 我是真的菜&#xff0c;为了不误导他人&#xff0c;本篇仅供个人使用。 首先&#xff0c;一个1e18的数&#xff0c;朴素\(O(\sqrt{n})\)素数判定肯定爆炸。怎么办呢…

throws Exception的意思

在方法声明部分使用&#xff0c;表示该方法可能产生此异常&#xff0c;如果在方法声明处使用了throws声明异常&#xff0c;则该方法产生异常也不必捕获&#xff0c;会直接把异常抛出到调用该方法的地方。