luoguP5369 [PKUSC2018] 最大前缀和

news/2024/9/19 19:27:35/文章来源:https://www.cnblogs.com/gmh77/p/18387652

题目

n<=20

题解

想了半天3位状态的折半,然后发现空间开不下(时间也不太行)

所以放弃思考,直接枚举答案


答案是a中的一个集合,设为S;记集合S的和为sum[S]

考虑当S确定时,有多少种方案能使答案恰好为sum[S]。为了处理多种sum相同的情况,记S为从前往后考虑,第一次出现最大ans的集合;记剩余部分为\(\bar S\)

那么考虑S和\(\bar S\)在序列上的情况,记前者组成的子段为L后者为R;
有L中任意真后缀的和>0,R中任意前缀的和<=0(否则S会变)

所以取到S的情况就是二者方案乘积,都可以用\(O(n2^n)\)状压不断加数求解(真后缀要特殊处理最后的全集,开两个状态搞)

code

#include <bits/stdc++.h>
#define fo(a,b,c) for (int a=b; a<=c; a++)
#define fd(a,b,c) for (int a=b; a>=c; a--)
#define add(a,b) a=((a)+(b))%mod
#define mod 998244353
#define Mod 998244351
#define ll long long
#define file
using namespace std;const int N=21;
const int twoN=1048576;
int T,n,K=11;
int a[N];
int sum[twoN];
int F[twoN],f[twoN],g[twoN];
ll ans;int main()
{
//	freopen("luogu5369.in","r",stdin);scanf("%d",&n);fo(i,1,n) scanf("%d",&a[i]);fo(s,1,(1<<n)-1){fo(i,1,n)if (s&(1<<(i-1))){sum[s]=sum[s-(1<<(i-1))]+a[i];break;}}F[0]=1;fo(s,0,(1<<n)-1-1){fo(i,1,n)if (!(s&(1<<(i-1)))){if (sum[s|(1<<(i-1))]>0)add(F[s|(1<<(i-1))],F[s]);add(f[s|(1<<(i-1))],F[s]);}}g[0]=1;fo(s,0,(1<<n)-1-1){fo(i,1,n)if (!(s&(1<<(i-1))) && sum[s|(1<<(i-1))]<=0)add(g[s|(1<<(i-1))],g[s]);}fo(s,1,(1<<n)-1){int s2=((1<<n)-1)^s;add(ans,1ll*f[s]*g[s2]%mod*sum[s]);}printf("%lld\n",(ans+mod)%mod);
}

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

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

相关文章

Java Script网页设计案例

本文提供了一个简单的JavaScript网页设计案例,该案例将实现一个动态的待办事项列表(Todo List)。用户可以在页面上添加新的待办事项,标记它们为已完成,以及删除它们。这个案例将使用HTML来构建页面结构,CSS来美化页面,以及JavaScript来添加动态功能。1. JavaScript网页设…

ggml 简介

ggml 是一个用 C 和 C++ 编写、专注于 Transformer 架构模型推理的机器学习库。该项目完全开源,处于活跃的开发阶段,开发社区也在不断壮大。ggml 和 PyTorch、TensorFlow 等机器学习库比较相似,但由于目前处于开发的早期阶段,一些底层设计仍在不断改进中。 相比于 llama.cp…

层序遍历(广度优先搜索)-102

题目描述 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。解题思路 这里我们层次遍历我们需要使用到队列这个数据结构,我们依次从根节点开始遍历,我们需要使用一个变量来记录此时我们队列中元素的数量,因为这样我们才知道这一层…

CF1980F1 F2 Field Division

前言 纪念一下独立做出来的 \(2400\) 的题 Easy version 思路 先说 \(Easy\) 版本的 我们走路的方式只有可能是这种样子:(出处:luogu user FiraCode) 不想手绘图了 即对列排序后,所形成的一个行编号上升的序列 所以 \(Easy\) 就很简单了,对于每一列的最大值,如果大于当前前…

一篇文章讲清楚Java中的反射

介绍 每个类都有一个 Class 对象,包含了与类有关的信息。当编译一个新类时,会产生一个同名的 .class 文件,该文件内容保存着 Class 对象。 类加载相当于 Class 对象的加载。类在第一次使用时才动态加载到 JVM 中,可以使用 Class.forName("com.mysql.jdbc.Driver"…

django timezone.now 小了8小时

django.util.timezone.now()原因:setting.py中设置了时区:LANGUAGE_CODE = en-usTIME_ZONE = UTCUSE_I18N = TrueUSE_TZ = True # 若数据库中存储的是UTC时间,但在模板显示的时候,会转成TIME_ZONE所示的本地时间进行显示****将TIME_ZONE时区改为:TIME_ZONE = Asia/Shangha…

枚举实现原理

枚举的定义 在JDK1.5之前,我们要是想定义一些有关常量的内容,例如定义几个常量,表示从周一到周末,一般都是在一个类,或者一个接口中,写类似于如下代码: public class WeekDayConstant {public static final int MONDAY = 0;public static final int TUESDAY = 1;public …

航图中的扇区数据生成

今天简单聊一下机场扇区,最后再介绍一下《风标设计2025》航图模块中的扇区绘制功能。机场扇区是以机场基准点(ARP)或归航台为圆心,半径46km(25nm),外加9km(5nm)缓冲区构成。PBN程序扇区通常以ARP为圆心,传统程序扇区以导航台为圆心。对于中小机场,为了统一和简化扇区划设…

【Azure Policy】添加策略用于审计Azure 网络安全组(NSG)规则 -- 只能特定的IP地址允许3389/22端口访问

问题描述 对Azure上的虚拟机资源,需要进行安全管理。只有指定的IP地址才能够通过RDP/SSH远程到虚拟机上, 有如下几点考虑: 1) 使用Azure Policy服务,扫描订阅中全部的网络安全组(NSG: Network Security Group) 资源 2) 判断入站规则,判断是否是3389, 22端口 3) 判断源地…

动态规划——数字三角形模型

数字三角形模型 母题 : 数字三角形思路 ​ 集合 f [i] [j] 表示所有从起点走到(i,j)的路径 ​ 属性 f [i] [j] 存的数是集合中所有路径和的最大值 ​ 状态计算:对于每一条从起点到 ( i , j ) 的路径,其要么是从左上方来的,要么是从右上方来的。 #include<bits/stdc++…