题目链接

LOJ:https://loj.ac/problem/6433

Solution

注意到最大前缀要满足什么性质,假设序列\(a[1..n]\)的最大前缀是\(s_x\),那么显然要满足所有\(x\)结尾的后缀和都为正,且所有\(x\)开头的前缀和都为负,\(0\)的情况不影响。

有了这个转化之后就好做了,直接状压,设\(g[s]\)为选了\(s\)这些数,能构成多少种序列,使得所有前缀都为负或\(0\)。

转移直接暴力枚举当前哪一个填最后一位就好了。

设\(f[s]\)表示选了\(s\)这些数,能构成多少种序列使得除了整个序列以外所有后缀都为正,转移和上面类似。

然后统计答案直接乘起来就好了。

复杂度\(O(2^n\cdot n)\)。

#include<bits/stdc++.h>
using namespace std; void read(int &x) {
x=0;int f=1;char ch=getchar();
for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-f;
for(;isdigit(ch);ch=getchar()) x=x*10+ch-'0';x*=f;
} void print(int x) {
if(x<0) putchar('-'),x=-x;
if(!x) return ;print(x/10),putchar(x%10+48);
}
void write(int x) {if(!x) putchar('0');else print(x);putchar('\n');} #define lf double
#define ll long long #define pii pair<int,int >
#define vec vector<int > #define pb push_back
#define mp make_pair
#define fr first
#define sc second #define FOR(i,l,r) for(int i=l,i##_r=r;i<=i##_r;i++) const int maxn = (1<<20)+10;
const int inf = 1e9;
const lf eps = 1e-8;
const int mod = 998244353; int add(int x,int y) {return x+y>=mod?x+y-mod:x+y;}
int del(int x,int y) {return x-y<0?x-y+mod:x-y;}
int mul(int x,int y) {return 1ll*x*y-1ll*x*y/mod*mod;} int s[maxn],f[maxn],g[maxn],a[22],n,all,ans; int main() {
read(n);FOR(i,0,n-1) read(a[i]);all=1<<n,all--;
FOR(i,1,all) s[i]=a[__builtin_ctz(i)]+s[i^(i&-i)];g[0]=1;
FOR(i,1,all) if(s[i]<=0) FOR(j,0,n-1) if((i>>j)&1) g[i]=add(g[i],g[i^(1<<j)]);
FOR(i,0,n-1) f[1<<i]=1;
FOR(i,1,all) {
if(s[i]>0) FOR(j,0,n-1) if(!((i>>j)&1)) f[i^(1<<j)]=add(f[i^(1<<j)],f[i]);
ans=add(ans,mul(s[i]%mod+mod,mul(f[i],g[all-i])));
}write(ans);
return 0;
}

最新文章

  1. Anliven - 解决问题的一些方法
  2. 系统进程 zygote(一)—— 概述
  3. 安装VMware vCenter过程设置数据库方法
  4. 小米2S Mk6.0.1 [只能做测试体验,不能使用]
  5. linux中fork()函数具体解释(原创!!实例解说)
  6. C++随机数rand(), srand()
  7. 字符串查找KMP算法
  8. 菜鸟VUER学习记——零0章、打开新的大门
  9. ZJOI2018游记
  10. web服务器初识
  11. 怎么在多场景下使用不同的 git 账号 commit
  12. R语言 一套内容 从入门 到放弃
  13. ubuntu环境部署项目
  14. Analyzing .net core application with SonarQube Scanner for MSBuild
  15. @Scope用法
  16. Python报错:ImportError: No module named src.data_layer
  17. python两个字典合并,两个list合并
  18. Java并发-多线程面试(全面)
  19. 批量导入数据(Mysql)报MySQL server has gone away 问题的解决方法
  20. IO流-LineNumberReader

热门文章

  1. Nginx 和 PHP 和 mysql扩展的安装
  2. HAVING 搜索条件在进行分组操作之后应用
  3. CF #365 DIV2 D Mishka and Interesting sum 区间异或+线段树
  4. 初始CSS3小知识【99%人不知道的小技巧】
  5. shell 修改文件所有者
  6. HAProxy+Keepalived高可用负载均衡
  7. hypermesh对msh文件或者cas文件重新命名边界
  8. Linux安装问题解决
  9. 第06组 Beta冲刺(5/5)
  10. Maven中依赖的scope的依赖范围