题目描述

九条可怜手上有一个长度为 n 的整数数列 ri,她现在想要构造一个长度为 n 的,满足如下条件的整数数列 A:

• 1 ≤ Ai ≤ ri。

• 对于任意 3 ≤ i ≤ n,令 R 为 A1 至 Ai−2 中大于等于 Ai−1 的最小值,L 为 A1 至 Ai−2中小于等于 Ai−1 的最大值。Ai 必须满足 L ≤ Ai ≤ R。如果不存在大于等于 Ai−1 的,那么 R = +∞;如果不存在小于等于 Ai−1 的,那么 L = −∞。

现在可怜想要知道共有多少不同的数列满足这个条件。两个数列 A 和 B 是不同的当且仅当至少存在一个位置 i 满足 Ai ≠ Bi。

输入输出格式

输入格式:

第一行输入一个整数 n,第二行输入 n 个整数 ri。

输出格式:

输出一个整数表示方案数,答案可能很大,对 998244353 取模后输出。

输入输出样例

输入样例#1:
复制

  1. 3
  2. 2 2 2
输出样例#1: 复制

  1. 6

说明

满足条件的序列有 [1, 1, 1], [1, 2, 1], [1, 2, 2], [2, 1, 1], [2, 1, 2], [2, 2, 2]。

测试点编号

  1. 1.2 n<=7 ri<=7
  2. 3.4 n<=50 ri<=10
  3. 5.6 n<=50 ri<=16
  4. 7.8 n<=50 ri<=50
  5. 9.10 n<=50 ri<=150

https://blog.csdn.net/dofypxy/article/details/79145068

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. #define rep(i,l,r) for (int i=l; i<=r; i++)
  5. using namespace std;
  6.  
  7. const int N=,mod=;
  8. int n,ans,r[N],mx,f[N][N][N],sl[N][N][N],sr[N][N][N];
  9.  
  10. int main(){
  11. freopen("P4063.in","r",stdin);
  12. freopen("P4063.out","w",stdout);
  13. scanf("%d",&n);
  14. rep(i,,n) scanf("%d",&r[i]),mx=max(mx,r[i]+);
  15. rep(i,,mx) sl[][i][mx]=sr[][][i]=;
  16. rep(i,,n){
  17. memset(f,,sizeof(f));
  18. rep(a,,r[i]){
  19. rep(L,,a-) rep(R,a+,mx) f[a][L][R]=(sl[L][L][R]+sr[R][L][R])%mod;
  20. rep(R,a,mx) f[a][a][a]=(f[a][a][a]+sl[a][mx][R])%mod;
  21. rep(a1,,mx) if (a1!=a) f[a][a][a]=(f[a][a][a]+sl[a1][a1][a]+sr[a1][a][a1])%mod;
  22. }
  23. memset(sl,,sizeof(sl)); memset(sr,,sizeof(sr));
  24. rep(a,,r[i]) rep(L,,mx) rep(R,a,mx) sl[a][L][R]=(f[a][L][R]+(L ? sl[a][L-][R] : ))%mod;
  25. rep(a,,r[i]) rep(L,,a) for (int R=mx; ~R; R--) sr[a][L][R]=(f[a][L][R]+sr[a][L][R+])%mod;
  26. }
  27. rep(a,,r[n]) rep(L,,a) rep(R,a,mx) ans=(ans+f[a][L][R])%mod;
  28. printf("%d\n",ans);
  29. return ;
  30. }

[P4063][JXOI2017]数列(DP)的更多相关文章

  1. 洛谷P4063 [JXOI2017]数列(dp)

    题意 题目链接 Sol 这题想还是不难想的,就是写起来很麻烦,然后去看了一下loj的最短代码表示只能Orz 首先不难发现一条性质:能够选择的区间一定是不断收缩的,而且新的可选区间一定是旧区间的某个位置 ...

  2. BZOJ 2431: [HAOI2009]逆序对数列( dp )

    dp(i,j)表示1~i的全部排列中逆序对数为j的个数. 从1~i-1的全部排列中加入i, 那么可以产生的逆序对数为0~i-1, 所以 dp(i,j) = Σ dp(i-1,k) (j-i+1 ≤ k ...

  3. BZOJ2431:[HAOI2009]逆序对数列(DP,差分)

    Description 对于一个数列{ai},如果有i<j且ai>aj,那么我们称ai与aj为一对逆序对数.若对于任意一个由1~n自然数组成的 数列,可以很容易求出有多少个逆序对数.那么逆 ...

  4. [编程题] 小易喜欢的数列 dp

    https://www.nowcoder.com/question/next?pid=6291726&qid=112729&tid=12736753 [编程题] 小易喜欢的数列 时间限 ...

  5. 【bzoj2431】[HAOI2009]逆序对数列 dp

    题目描述 对于一个数列{ai},如果有i<j且ai>aj,那么我们称ai与aj为一对逆序对数.若对于任意一个由1~n自然数组成的 数列,可以很容易求出有多少个逆序对数.那么逆序对数为k的这 ...

  6. 不等式数列 DP

    度度熊最近对全排列特别感兴趣,对于1到n的一个排列,度度熊发现可以在中间根据大小关系插入合适的大于和小于符号(即 '>' 和 '<' )使其成为一个合法的不等式数列.但是现在度度熊手中只有 ...

  7. BZOJ 2431 逆序对数列 DP

    2431: [HAOI2009]逆序对数列 Time Limit: 5 Sec Memory Limit: 128 MB Description 对于一个数列{ai},如果有i< j且ai> ...

  8. luoguP1415 拆分数列 [dp]

    题目描述 给出一列数字,需要你添加任意多个逗号将其拆成若干个严格递增的数.如果有多组解,则输出使得最后一个数最小的同时,字典序最大的解(即先要满足最后一个数最小:如果有多组解,则使得第一个数尽量大:如 ...

  9. [BZOJ2431][HAOI2009]逆序对数列(DP)

    从小到大加数,根据加入的位置转移,裸的背包DP. #include<cstdio> #include<cstring> #include<algorithm> #d ...

随机推荐

  1. UIView显示时遮挡导航栏的方法

    [self.navigationController.view:addSubview];

  2. Tomcat的安装以及基本配置

    Tomcat是目前最常见也是最流行的基于java的一个web服务器软件   Tomcat的安装   (1)首先需要java环境,也就是说要依赖于java虚拟机JVM   (2)下载Tomcat ,地址 ...

  3. 以下suse11.3x64可以安装pycrypto-2.6.1

    rpm -qa adaptec-firmware-1.35-2.15.4gnome-menus-branding-SLED-11.1-14.26man-pages-3.15-2.23.1crackli ...

  4. C++之编译器与链接器工作原理

    原文来自:http://blog.sina.com.cn/s/blog_5f8817250100i3oz.html 这里并没不是讨论大学课程中所学的<编译原理>,只是写一些我自己对C++编 ...

  5. STM32 volatile关键字

    为了提供对特殊地址的稳定访问. [C] 纯文本查看 复制代码 ? 1 2 3 int i=10; int j=i;     //1 int k=i;    //2 此时编译器对上面代码进行优化,因为在 ...

  6. Linux 入门记录:七、fdisk 分区工具

    一.fdisk分区工具 fdisk 是来自 IBM 的老牌分区工具,支持绝大多数操作系统,几乎所有的 Linux 发行版都装有 fdisk,包括在 Linux 的 resuce 模式下依然能够使用. ...

  7. 大原則 研讀 spec 與 code 的 心得

    最近在研究 stm32f429i-disc0 的 device tree source code, 並且 參造 Devicetree Specification Release 0.1, 在 dts ...

  8. nginx源码分析--使用GDB调试(strace、 pstack )

    nginx源码分析--使用GDB调试(strace.  pstack ) http://blog.csdn.net/scdxmoe/article/details/49070577

  9. jQuery -《锋利的jQuery》————读后小结

    jQuery是一个优秀的javascript库. 我用的是vs2012自带的  jquery-1.8.2.js这个库,在Scripts这个文件夹下面 首先,我们使用jQuery要在head标签内引入j ...

  10. Redis在CentOS 7上的安装部署

    简介: Redis是一种高级key-value数据库.它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富.有字符串,链表,集 合和有序集合.支持在服务器端计算集合的并,交和补集( ...