令$sum_{i}=\sum_{j=1}^{i}a_{j}$,即要求其满足:

1.$sum_{0}=sum_{2n}=0$且$\forall 1\le i\le 2n,|sum_{i}-sum_{i-1}|=1$

2.$\sum_{0\le i<j\le 2n}[sum_{i}=sum_{j}]=k$

问题即询问有多少个这样的$sum_{i}$

换一个角度来看待此问题,将所有$sum_{t}\ge i$的位置取出,并构成一个子序列,显然剩下的位置即在其中若干个数之间插入一些小于$j$的数字

不难发现,只有在相邻两个$i$之间或在$i>0$时的开头和结尾才能插入(且必须要插入),其余相邻两数必然在原序列中也是相邻的

由此,即可以dp,令$f_{i,j,k,l}$表示有多少个长为$sum_{t}\ge i$、长为$j$、相等的对数为$k$、有$l$对相邻的$i$的序列数,转移枚举加入的$i-1$的个数$x$,即$f_{i-1,j+x,k+{x\choose 2},x-(l+2[i>0])}=\sum {x-1\choose l+2[i>0]-1}f_{i,j,k,l}$

(其中关于$x-(l+2[i>0])$,首先$i-1$至少要在每一个能插入的位置都插入,即$l+2[i>0]$个位置,接下来每一个多出来的$x$都可使得相邻对数加1,即此式,组合数类似)

关于初始状态,需要枚举最大值$max\ge 0$以及其个数$tot$,即$f_{max,tot,{tot\choose 2},tot-1}=1$

关于最终答案,同样枚举最小值$min\le 0$,即$\sum f_{min,2n+1,k,0}$

时间复杂度即为$o(n^{6})$,空间上对其第一维滚动,可以优化到$o(n^{4})$

这一做法在常数较为优秀时(大概)可以通过,但并不足够好

考虑其中第一维,事实上后面的转移与第一维的关系并不大(仅仅是$i>0$与$i\le 0$分类),且$i$的枚举范围如果增大并没有实际意义,其可以看作完全背包关于数量的枚举

换言之,可以通过顺序枚举其余位置,来代替$i$的枚举,复杂度降为$o(n^{5})$,可以通过

 1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 65
4 #define ll long long
5 int n,m;
6 ll ans,c[N][N],f[N][N*N][N];
7 int main(){
8 scanf("%d%d",&n,&m);
9 for(int i=0;i<N;i++){
10 c[i][0]=c[i][i]=1;
11 for(int j=1;j<i;j++)c[i][j]=c[i-1][j-1]+c[i-1][j];
12 }
13 for(int i=1;i<=n+1;i++)f[i][c[i][2]][i-1]=1;
14 for(int i=1;i<=2*n+1;i++)
15 for(int j=0;j<=m;j++)
16 for(int k=0;k<i;k++)
17 for(int x=k+2;x<=2*n+1-i;x++)
18 if (j+c[x][2]<=m)f[i+x][j+c[x][2]][x-(k+2)]+=c[x-1][k+1]*f[i][j][k];
19 for(int i=1;i<=2*n+1;i++)
20 for(int j=0;j<=m;j++)
21 for(int k=1;k<i;k++)
22 for(int x=k;x<=2*n+1-i;x++)
23 if (j+c[x][2]<=m)f[i+x][j+c[x][2]][x-k]+=c[x-1][k-1]*f[i][j][k];
24 printf("%lld",ans+f[2*n+1][m][0]);
25 }

[ARC117E]Zero-Sum Ranges 2的更多相关文章

  1. sysbench的安装与使用(with MySQL)

    sysbench是一款开源的多线程性能测试工具,可以执行CPU/内存/线程/IO/数据库等方面的性能测试. 项目主页: http://sysbench.sourceforge.net/ 安装文档htt ...

  2. sysbench压力测试工具简介和使用(一)

    sysbench压力测试工具安装和参数介绍 一.sysbench压力测试工具简介: sysbench是一个开源的.模块化的.跨平台的多线程性能测试工具,可以用来进行CPU.内存.磁盘I/O.线程.数据 ...

  3. 使用sysbench进行压力测试

    sysbench是一款开源的多线程性能测试工具,可以执行CPU/内存/线程/IO/数据库等方面的性能测试.数据库目前支持MySQL/Oracle/PostgreSQL/Drizzle,它主要包括以下几 ...

  4. 【MySQL】Sysbench性能测试

    两台MySQL配置不一样,要测试下性能差别 [m1] long_query_time = 0.1 log_slave_updates innodb_flush_log_at_trx_commit [m ...

  5. sysbench做测试

    安装的时候需要libtool,如果已经装了CP到sysbench的目录下 1:用法 sysbench [general-options]… –test=<test-name> [test- ...

  6. MySQL性能测试工具sysbench的安装和使用

    sysbench是一个开源的.模块化的.跨平台的多线程性能测试工具,可以用来进行CPU.内存.磁盘I/O.线程.数据库的性能测试.目前支持的数据库有MySQL.Oracle和PostgreSQL.当前 ...

  7. sysbench压力测试工具安装和参数介绍

    一.sysbench压力测试工具简介: sysbench是一个开源的.模块化的.跨平台的多线程性能测试工具,可以用来进行CPU.内存.磁盘I/O.线程.数据库的性能测试.目前支持的数据库有MySQL. ...

  8. sysbench 压力测试工具

    一.sysbench压力测试工具简介: sysbench是一个开源的.模块化的.跨平台的多线程性能测试工具,可以用来进行CPU.内存.磁盘I/O.线程.数据库的性能测试.目前支持的数据库有MySQL. ...

  9. sysbench相关

    Sysbench工具是集系统测试和数据库测试一体的测试工具,但是传统的sysbench在数据库测试方面,没有遵循TPC-C测试模型,仅仅支持单个表的数据.而在实际的业务场景中,业务逻辑复杂的多.开源的 ...

  10. 使用 sysbench对mysql进行压力测试介绍之一

    sysbench是一款开源的多线程性能测试工具,可以执行CPU/内存/线程/IO/数据库等方面的性能测试.数据库目前支持MySQL/Oracle/PostgreSQL.本文只是简单演示一下几种测试的用 ...

随机推荐

  1. 程序员微机课系列—我的nodejs多版本管理方法

    nodejs的多版本配置对于我来说一直都是一个较为头疼的事情.本人的开发工作会涉及electron以及前端,对于工作中使用的npm包(点名node-sqlite3和node-sass)在某些情况下,会 ...

  2. 题解 CF914G Sum the Fibonacci

    题目传送门 题目大意 给出\(n,s_{1,2,...,n}\),定义一个五元组\((a,b,c,d,e)\)合法当且仅当: \[1\le a,b,c,d,e\le n \] \[(s_a\vee s ...

  3. Caterpillar的启动以及自动化启动脚本

    Caterpillar的启动以及自动化启动脚本 Caterpillar是基于以太坊的BPMS,建模的BPMN图形可被Caterpillar转化为solidity程序部署到以太坊中. Caterpill ...

  4. 兜底机制——leader到底做了什么?

    Case 在之前一次年底考评的时候,有一位leader将一个案例同时用到了自己和下属身上,老板发出了责问: 这个项目到底你是负责人,还是你下面的同学是负责人,如果下面的同学是负责人,为什么要算到你的头 ...

  5. SpringCloud-SpringBoot-SpringCloudAlibaba对应版本选择

    一.SpringCloud-SpringBoot 对应的版本选择 SpringCloud官网常规方式只能查看最新的几个版本信息 https://spring.io/projects/spring-cl ...

  6. st表树状数组入门题单

    预备知识 st表(Sparse Table) 主要用来解决区间最值问题(RMQ)以及维护区间的各种性质(比如维护一段区间的最大公约数). 树状数组 单点更新 数组前缀和的查询 拓展:原数组是差分数组时 ...

  7. Python语法2

    目录 选择结构 循环结构 文件读写 函数 类和对象 选择结构 if,elif,else,使用时注意条件的先后顺序 通过缩进四个空格来区分代码块 # 从控制台输入 age = int(input(&qu ...

  8. 离线状态迁移Anaconda虚拟环境

    离线状态迁移Anaconda虚拟环境 同样是项目需求,需要布署的服务器上的Anaconda安装到了普通账户下 而后续所有的内容都需要通过root账户进行操作,而服务器已经布署,联网比较麻烦 本文提出, ...

  9. 2021.8.13考试总结[NOIP模拟38]

    T1 a 入阵曲.枚举矩形上下界,之后从左到右扫一遍.用树状数组维护前缀和加特判可以$A$,更保险要脸的做法是双指针扫,因为前缀和单调不减. $code:$ 1 #include<bits/st ...

  10. 单片机零基础学习之从“点灯”入门STM32

    本篇文章通过一个简单的例子来熟悉模块化编程以及利用库函数的方法进行开发使用STM32外设的基本流程. 首先,我们打开本讲的例程,在工程目录我们可以看到驱动分组下有 led.delay 两个.c源文件, ...