【计数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 ...
随机推荐
- [pytorch] 自定义激活函数中的注意事项
如何在pytorch中使用自定义的激活函数? 如果自定义的激活函数是可导的,那么可以直接写一个python function来定义并调用,因为pytorch的autograd会自动对其求导. 如果自定 ...
- Android即时通讯开发之XMPP (一)初识XMPP协议和asmack
在讲XMPP和asmck之前 ,我还是先分享一些资源文档,如果你有耐心,可以直接忽略我下面所写的.下面有关XMPP的介绍大部分是摘抄网上的文档,后面我会写一些基于XMPP协议和asmck开源库的聊天室 ...
- SpringCloud(六)之 网关概念、Zuul项目搭建-(利用Zuul 实现鉴权和限流实战)
一.网关概念 1.什么是路由网关 网关是系统的唯一对外的入口,介于客户端和服务器端之间的中间层,处理非业务功能 提供路由请求.鉴权.监控.缓存.限流等功能.它将"1对N"问题转换成 ...
- 【SR汇总】算法时间效率
1.SRCNN-0.39s SRCNN处理速度. 论文:Learning a Deep Convolutional Network forImage Super-Resolution 中,4.2节. ...
- error: atomic: 没有那个文件或目录
Linux下编译的时候遇到一个问题,就是提示 error: atomic: 没有那个文件或目录 执行的命令是gcc -o myCXXLog myCXXLog.c 经过网上搜索,解决方法有二 (1 ...
- C#.net winform skin 皮肤大全
C#.net winform skin 皮肤大全 1. 东日IrisSkin IrisSkin 共有两个版本,一个是IrisSkin.dll 用于.Net Framework1.0/1.1 和Iris ...
- Linux命令集锦:tmux命令
tmux是一款优秀的终端复用软件,平时用到的强大功能有下面两个: 窗口管理:同时启用多个窗口: 保护现场:连接到远程主机之后,一旦断开,那么当前账户登录的任务就被取消了,但是使用 tmux 可以在断开 ...
- Leetcode之动态规划(DP)专题-264. 丑数 II(Ugly Number II)
Leetcode之动态规划(DP)专题-264. 丑数 II(Ugly Number II) 编写一个程序,找出第 n 个丑数. 丑数就是只包含质因数 2, 3, 5 的正整数. 示例: 输入: n ...
- win7 开远程记录
1,HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp HKEY_LOCAL_M ...
- HA cluster
------------恢复内容开始------------ 集群分类: LB负载均衡集群(lvs/nginx(http/upstream, stream/upstream)),HA高可用集群,HP高 ...