参考博客:【CF1068D】Array Without Local Maximums(计数DP)

【题意】

n<=1e5

dp[i][j][k]表示当前第i个数字为j,第i-1个数字与第i个之间大小关系为k的方案数(a[i-1]<a[i],=,>)

转移时使用前缀和和后缀和加速

【状态转移】:

因为情况已经分成三种情况了,小于,等于,大于。

然后根据题目意思,就是不能出现一种情况,a[i-1] < a[i] > a[i+1]

就是说,当我们转移:"大于"时,前一个状态不能是”小于“。

【小结】:

道理我都懂,但我就是写不出来。一头雾水,但是我看了看题解,我就醍醐灌顶了。。。


【代码】(里面有详细的解释)

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod = ;
const int N = 1e5+;
const int M = ;
ll f[N][M][],tmp;
int a[N],n; /*
f[i][j][k]
第i个位置上,的数值为j,与前一个数的关系为k. k = 0 a[i-1] < a[i] /
k = 1 a[i-1] == a[i] -
k = 2 a[i-1] > a[i] \ */ int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%d",&a[i]); /*
由于题意让我们a[1] <= a[2]
我们初始化时,在1的位置上
必须让f[1][i][0],以防止 a[1] > a[2]的情况
*/ for(int i=;i<=;i++){
if( a[] == - || i == a[] ) f[][i][] = ;
else f[][i][] = ;
}
//[2,n]上进行状态转移
for(int i=;i<=n;i++){ //枚举当前位置的值,‘=‘的情况 , k = 1 '-'
for(int j=;j<=;j++){
if( a[i] == - || a[i] == j )
f[i][j][] = (f[i-][j][]+f[i-][j][]+f[i-][j][])%mod;
else
f[i][j][] = ;
} //枚举当前位置的值,‘<‘的情况 , k = 0 '/'
//∵a[i-1] < a[i]
//前一个位置可能有多种情况,所以当前位置应该是记录前缀和
tmp = ;
for(int j=;j<=;j++){
if( a[i] == - || a[i] == j )
f[i][j][] = tmp ;
else f[i][j][] = ;
tmp = (tmp + f[i-][j][] + f[i-][j][] + f[i-][j][] ) % mod ;
} //枚举当前位置的值,‘>‘的情况, k = 2 '\'
//∵a[i-1] > a[i]
//前一个位置可能有多种情况,所以当前位置应该是记录后缀和
tmp = ;
for(int j=;j>=;j--){
if( a[i] == - || a[i] == j )
f[i][j][] = tmp ;
else f[i][j][] = ;
tmp = ( tmp + f[i-][j][] + f[i-][j][] ) %mod ;
}
}
ll ans = ; /*
题目要求:
∵a[n-1] >= a[n]
∴从两种状态进行转移,k=1.
*/
for(int i=;i<=;i++){
ans = ( ans + f[n][i][] + f[n][i][] ) % mod ;
} printf("%lld\n",ans);
return ;
}

计数dp

【计数dp】Array Without Local Maximums的更多相关文章

  1. 【CF1068D】Array Without Local Maximums(计数DP)

    题意: n<=1e5 思路:卡内存 dp[i][j][k]表示当前第i个数字为j,第i-1个数字与第i个之间大小关系为k的方案数(a[i-1]<a[i],=,>) 转移时使用前缀和和 ...

  2. codeforces 1068d Array Without Local Maximums dp

    题目传送门 题目大意:给出一个长度为n的数组,这个数组有的数是给出的,有的数是固定的,且范围都在[1,200]之间,要求这个数组中,每一个数字都小于等于 前后两个数字的最大值,求方案数mod p. 思 ...

  3. 【非原创】codeforces - 1067A Array Without Local Maximums【dp】

    学习博客:戳这里 附本人代码: 1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 co ...

  4. 「题解报告」CF1067A Array Without Local Maximums

    大佬们的题解都太深奥了,直接把转移方程放出来让其他大佬们感性理解,蒟蒻们很难理解,所以我就写了一篇让像我一样的蒟蒻能看懂的题解 原题传送门 动态规划三部曲:确定状态,转移方程,初始状态和答案. --神 ...

  5. HDU5800 To My Girlfriend 背包计数dp

    分析:首先定义状态dp[i][j][s1][s2]代表前i个物品中,选若干个物品,总价值为j 其中s1个物品时必选,s2物品必不选的方案数 那么转移的时候可以考虑,第i个物品是可选可可不选的 dp[i ...

  6. CodeForces 176B Word Cut (计数DP)

    Word Cut Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit St ...

  7. [DP之计数DP]

    其实说实在 我在写这篇博客的时候 才刚刚草了一道这样类型的题 之前几乎没有接触过 接触过也是平时比赛的 没有系统的做过 可以说0基础 我所理解的计数dp就是想办法去达到它要的目的 而且一定要非常劲非常 ...

  8. HDU4815/计数DP

    题目链接[http://acm.hdu.edu.cn/showproblem.php?pid=4815] 简单说一下题意: 有n道题,每到题答对得分为a[ i ],假如A不输给B的最小概率是P,那么A ...

  9. HDU 6377 度度熊看球赛 (计数DP)

    度度熊看球赛 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Subm ...

随机推荐

  1. ZR#712

    消灭砖块 题意: 很多块砖分布在一个 $ m \times m $ 的矩阵中,他可以消掉以他为左上角顶点的一个 $ n \times n $ 的矩阵里的所有砖块.计算可以消掉最多的砖块数(只能消一次) ...

  2. mybatis之<trim

    1.<trim prefix="" suffix="" suffixOverrides="" prefixOverrides=&quo ...

  3. Flutter常见数据类型及数据类型转换

    简介 既然 Dart 是一门语言,那么就和我们所知道语言一样,有基本的数据类型以及常见的流程处理语法,那么我们就来了解下. Dart 的所有东西都是对象,包括数字,函数等.它们都继承自 Object ...

  4. vue 动态渲染数据很慢或不渲染

    vue 动态渲染数据很慢或不渲染 原因是因为vue检测速度很慢,因为多层循环了,在VUE 2.x的时候还能渲染出来,1.x的时候压根渲染不出来.解决方式:在动态改变数据的方法,第一行加上 this.$ ...

  5. LC 820. Short Encoding of Words

    Given a list of words, we may encode it by writing a reference string S and a list of indexes A. For ...

  6. 【11】ajax请求后台接口数据与返回值处理js写法

    $.ajax({ url: "/test.php",//后台提供的接口 type: "post",   //请求方式是post data:{"type ...

  7. IE下 CSS hover iframe失效

    预期:某个div下存在iframe子元素,当鼠标移动到该div下,该iframe出现,移出则iframe消失,移入iframe不会引起iframe消失. 问题:在火狐下结果满足预期,在IE下,鼠标移入 ...

  8. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_4-2.微服务下登录检验解决方案 JWT讲解

    笔记 2.微服务下登录检验解决方案 JWT讲解     简介:微服务下登录检验解决方案 JWT讲解 json wen token 1.JWT 是一个开放标准,它定义了一种用于简洁,自包含的用于通信双方 ...

  9. Netflix Zuul

    Zuul 是在云平台上提供动态路由,监控,弹性,安全等边缘服务的框架.Zuul 相当于是设备和 Netflix 流应用的 Web 网站后端所有请求的前门. ApiGateway服务器 1.pom &l ...

  10. MySQLdb User's Guide

    MySQLdb MySQLdb-1.2.2 API documentation http://mysql-python.sourceforge.net/MySQLdb-1.2.2/ MySQLdb U ...