令$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. List接口常用实现类对比

    相同点 都实现了List接口 储存了有序 可重复的数据 不同点 ArrayList 线程不安全 但是效率高 底层使用 Object[] elementData 实现 LinkedList 底层使用双向 ...

  2. 洛谷4103 HEOI2014大工程(虚树+dp)

    又是一道虚树好题啊 我们建出来虚树,然后考虑dp过程,我们分别令\(sum[x],mndis[x],mxdis[x],size[x]\)为子树内的路径长度和,最短链,最长链,子树内关键点个数. 对于一 ...

  3. SpringBoot入门08-整合Mabatis

    整合所需的依赖 注解方式和映射文件方式的mybatis都可以被整合进springboot 创建springboot的web项目后,在pom加入spring-mybatis和mysql-jdbc和thy ...

  4. Python技法3:匿名函数、回调函数和高阶函数

    1.定义匿名或内联函数 如果我们想提供一个短小的回调函数供sort()这样的函数用,但不想用def这样的语句编写一个单行的函数,我们可以借助lambda表达式来编写"内联"式的函数 ...

  5. OO2020 助教工作总结

    1 我的初衷 这一学期的OO助教工作是我一段宝贵的经历,在其中我学习了很多.见识了很多,收获满满.当时报名OO的初衷主要有三方面.首先,我想说OO是我所上过的最好的一门课之一,这门课有这一套从理论讲授 ...

  6. 零基础入门C语言超详细的字符串详解

    本篇文章是对C语言字符串操作进行了详细的总结分析,需要的朋友参考下 1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, ...

  7. python fnmatch & glob

    1,转载:Python模块学习 - fnmatch & glob - Dahlhin - 博客园 (cnblogs.com) 介绍 fnmatch 和 glob 模块都是用来做字符串匹配文件名 ...

  8. 链表中环的入口结点 牛客网 剑指Offer

    链表中环的入口结点 牛客网 剑指Offer 题目描述 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null. # class ListNode: # def __init__(se ...

  9. You (oracle) are not allowed to access to (crontab) because of pam configura

    用oracle用户添加备份计划任务,crontab -e,提示:You (oracle) are not allowed to access to (crontab) because of pam c ...

  10. OOP作业总结一

    PS:建议用 Edge 查看此博客,Chrome 的话文章界面会有点窄,看起来可能会比较难受,我想改宽点但是不会改. 我会改了!改宽了一些,现在看起来舒服了很多,芜湖. 问题数据已修复,我们胜利辣! ...