【计数dp】Array Without Local Maximums
参考博客:【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的更多相关文章
- 【CF1068D】Array Without Local Maximums(计数DP)
题意: n<=1e5 思路:卡内存 dp[i][j][k]表示当前第i个数字为j,第i-1个数字与第i个之间大小关系为k的方案数(a[i-1]<a[i],=,>) 转移时使用前缀和和 ...
- codeforces 1068d Array Without Local Maximums dp
题目传送门 题目大意:给出一个长度为n的数组,这个数组有的数是给出的,有的数是固定的,且范围都在[1,200]之间,要求这个数组中,每一个数字都小于等于 前后两个数字的最大值,求方案数mod p. 思 ...
- 【非原创】codeforces - 1067A Array Without Local Maximums【dp】
学习博客:戳这里 附本人代码: 1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 co ...
- 「题解报告」CF1067A Array Without Local Maximums
大佬们的题解都太深奥了,直接把转移方程放出来让其他大佬们感性理解,蒟蒻们很难理解,所以我就写了一篇让像我一样的蒟蒻能看懂的题解 原题传送门 动态规划三部曲:确定状态,转移方程,初始状态和答案. --神 ...
- HDU5800 To My Girlfriend 背包计数dp
分析:首先定义状态dp[i][j][s1][s2]代表前i个物品中,选若干个物品,总价值为j 其中s1个物品时必选,s2物品必不选的方案数 那么转移的时候可以考虑,第i个物品是可选可可不选的 dp[i ...
- CodeForces 176B Word Cut (计数DP)
Word Cut Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Submit St ...
- [DP之计数DP]
其实说实在 我在写这篇博客的时候 才刚刚草了一道这样类型的题 之前几乎没有接触过 接触过也是平时比赛的 没有系统的做过 可以说0基础 我所理解的计数dp就是想办法去达到它要的目的 而且一定要非常劲非常 ...
- HDU4815/计数DP
题目链接[http://acm.hdu.edu.cn/showproblem.php?pid=4815] 简单说一下题意: 有n道题,每到题答对得分为a[ i ],假如A不输给B的最小概率是P,那么A ...
- HDU 6377 度度熊看球赛 (计数DP)
度度熊看球赛 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Subm ...
随机推荐
- POJ3764
题目 POJ3764 The xor-longest Path 原题传送门 主要思路: 1.求出每个点到根节点(这里是树,所以直接取0)路径上所有权值xor和为d[i],则任意两点间路径xor和则为 ...
- Druid数据源监控配置
在web.xml中添加如下代码 <!-- druid监控 --> <servlet> <servlet-name>DruidStatView</servlet ...
- 22.从上往下打印二叉树 Java
题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 解题思路 就是二叉树的层序遍历.借助一个队列就可以实现.使用两个队列一个存放节点,一个存放值.先将根节点加入到队列中,然后遍历队列中的 ...
- BUUCTF平台-web-边刷边记录-1
1.WarmUp 思路很清晰,文件包含,漏洞点在代码会二次解码,只需注入一个?就可以使用../../进行路径穿越,然后去包含flag,flag路径在hint.php里面有 2.easy_tornado ...
- 黑马vue---19、v-for中key的使用注意事项
黑马vue---19.v-for中key的使用注意事项 一.总结 一句话总结: 必须 在使用 v-for 的同时,指定 唯一的 字符串/数字 类型 :key 值 <p v-for="i ...
- 微信小程序之状态管理A
其实这个标题 不是很对 主要是最近小程序项目中 有这么一个状态 所有商品都共用一个商品详情页面 大概就是这样子 为了公司 保险起见,一些展示的内容已经处理 但是无伤大雅 就是这么两个按钮 左侧粉色 ...
- Java中AWT、Swing与SWT三大GUI技术的原理与效率差异
Java中AWT.Swing与SWT三大GUI技术的原理与效率差异 转 https://blog.csdn.net/weixin_37703598/article/details/81843810 ...
- 有关react-native的最常用的库(文件、样式、UI组件)
一.对文件的处理 1.react-native-fs 2.react-native-file-selector 3.MaterialFilePicker 二.React-Native 样式指南 1.r ...
- 【Hadoop】MapReduce练习:分科目等级并按分区统计学生以及人数
需求 背景:学校的学生的是一个非常大的生成数据的集体,比如每次考试的成绩 现有一个班级的学生一个月的考试成绩数据. 科目 姓名 分数 需求:求出每门成绩中属于甲级的学生人数和总人数 ...
- Kubernetes web界面kubernetes-dashboard安装【h】
本文讲述的是如何部署K8s的web UI,前提是已经有一个k8s集群后,按照如下步骤进行即可.(如下步骤都是在master节点上进行操作) 1.下载kubernetes-dashboard.yaml文 ...