题意:

有一个长度为n的序列,满足对于所有的a[x],与它相邻的两个元素a[x-1]和a[x+1]中至少有一个大于等于它,其中a[1]和a[n]当然只有一个相邻元素, 现在这个序列中有些数字被破坏了(标记为-1),问有多少种合法恢复方案(每个数字∈[1,200])

思路:

dp[x][y][0/1/2]表示已经确定了第x个数字为y,且它左面那个数字a[x-1]小于/等于/大于它的总方案个数

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<map>
#include<string>
#include<math.h>
#include<queue>
#include<stack>
#include<iostream>
using namespace std;
#define LL long long
#define mod 998244353
LL dp[100005][205][3];      //0<  1=  2>
int a[100005];
int main(void)
{LL sum;int n, i, j;scanf("%d", &n);for(i=1;i<=n;i++)scanf("%d", &a[i]);for(i=1;i<=200;i++){if(a[1]==-1 || a[1]==i)dp[1][i][0] = 1;elsedp[1][i][0] = 0;}for(i=2;i<=n;i++){for(j=1;j<=200;j++){if(a[i]==-1 || a[i]==j)dp[i][j][1] = (dp[i-1][j][0]+dp[i-1][j][1]+dp[i-1][j][2])%mod;elsedp[i][j][1] = 0;}sum = 0;for(j=1;j<=200;j++){if(a[i]==-1 || a[i]==j)dp[i][j][0] = sum;elsedp[i][j][0] = 0;sum = (sum+dp[i-1][j][0]+dp[i-1][j][1]+dp[i-1][j][2])%mod;}sum = 0;for(j=200;j>=1;j--){if(a[i]==-1 || a[i]==j)dp[i][j][2] = sum;elsedp[i][j][2] = 0;sum = (sum+dp[i-1][j][1]+dp[i-1][j][2])%mod;}}sum = 0;for(i=1;i<=200;i++)sum = (sum+dp[n][i][1]+dp[n][i][2])%mod;printf("%lld\n", sum);return 0;
}
/*
2
-1 -1
*/

Codeforces Round #518 (Div. 2): D. Array Without Local Maximums(DP)相关推荐

  1. Codeforces Round #509 (Div. 2) F. Ray in the tube(思维)

    题目链接:http://codeforces.com/contest/1041/problem/F 题意:给出一根无限长的管子,在二维坐标上表示为y1 <= y <= y2,其中 y1 上 ...

  2. Codeforces Round #318 (Div. 2) B Bear and Three Musketeers (暴力)

    算一下复杂度.发现可以直接暴.对于u枚举a和b,判断一下是否连边,更新答案. #include<bits/stdc++.h> using namespace std;int n,m; co ...

  3. Codeforces Round #641 (Div. 2) D. Orac and Medians 题解(思维)

    题目链接 题目大意 就是数组里一段数可以都变成他的中位数,问整个序列能不能变成k.可以变化很多次 题目思路 emmm,根本没什么思路,看了题解感觉根本想不到啊,但是仔细想想其实确实应该那么想. 先令a ...

  4. Codeforces Round #645 (Div. 2) E - Are You Fired? 题解(思维)

    题目链接 题目大意 给你一个长为n的数组前(n+1)/2个数为a[i],后面的数为x,让你求出一个长度k使其所有连续为k的数组之和都大于0 题目思路 首先要找性质,如果k满足,那么显然k*2也满足那么 ...

  5. Codeforces Round #775 (Div. 2, based on Moscow Open Olympiad in Informatics)简训

    Codeforces Round #775 (Div. 2, based on Moscow Open Olympiad in Informatics)简训 导语 涉及的知识点 题目 A Game B ...

  6. Codeforces Round #459 (Div. 2) C 思维,贪心 D 记忆化dp

    Codeforces Round #459 (Div. 2) C. The Monster 题意:定义正确的括号串,是能够全部匹配的左右括号串. 给出一个字符串,有 (.). ? 三种字符, ? 可以 ...

  7. Codeforces Round #579 (Div. 3) F2. Complete the Projects (hard version) dp + 贪心

    传送门 文章目录 题意: 思路: 题意: 思路: 排序方式跟easyeasyeasy版本的一样,但是hardhardhard版本是输出最多能选多少,所以我们对b<0b<0b<0的情况 ...

  8. Codeforces Round #590 (Div. 3) F. Yet Another Substring Reverse 子集dp

    传送门 文章目录 题意: 思路: 题意: 思路: 之前做过类似的题,翻转一个字串相当于将任意两个不相交的串连在一起.再一看字符集≤20\le20≤20,那就是铁子集dpdpdp了. 定义f[i]f[i ...

  9. Codeforces Round #598 (Div. 3) E. Yet Another Division Into Teams dp + 输出方案

    传送门 文章目录 题意: 思路: 题意: 给你一个长度为nnn的序列aaa,你需要将其分成若干组,每组的价值为max⁡(ai)−min(ai)\max(a_i)-min(a_i)max(ai​)−mi ...

最新文章

  1. SAP QM 事务代码QA11里的to New Material
  2. 简单理解Ext.DomQuery操作CSS3选择器
  3. 频谱泄露 振动 matlab,关于MATLAB FFT频谱泄露和加窗
  4. docker-compose执行报错(selinux所致):write /proc/self/attr/keycreate: permission denied
  5. 常见的http状态码
  6. 前端学习(358):svn安装
  7. python excel 单元格格式_python设置单元格数值格式
  8. gettimeofday函数使用《代码》
  9. 回收站有html文件,回收站在哪个盘?(每个磁盘上都有一个回收站)
  10. android 4.4 webview 上传,android使用webview上傳文件(適配4.4以上系統)
  11. 胡桂珍c语言期末考试题,C程序设计教程
  12. ANDROID AIDL 1
  13. 理解数据库设计范式【转】
  14. java获取键盘输入
  15. Oracle禁止connect / as sysdba方式登录
  16. 苹果cmsV10资源采集插件
  17. 16种常用的数据分析方法-聚类分析
  18. mysql是bsd协议吗_五种开源协议(GPL,LGPL,BSD,MIT,Apache)介绍
  19. 最小二乘法以及正交最小二乘(OLS)的推导与简单比较
  20. bash ps1变量_Shell PS1变量:命令提示符设置

热门文章

  1. 线上python课程一般多少钱-Python在线培训课程费用是多少?值不值得报名?
  2. python爬虫-Python 爬虫介绍
  3. 怎么实现语音识别_手机语音识别怎么设置
  4. 插槽作用域渲染按钮开关 ~ 满满的干货哦
  5. Media Player Classic - HC 源代码分析 3:核心类 (CMainFrame)(2)
  6. android viewpager 缩放,android – 使用ViewPager实现捏缩放
  7. c语言从excal读取字符串,C语言操作EXCEL文件(读写)
  8. python 删除断点_给python 初学者的四条忠告,减少一些没必要的麻烦
  9. mysql 命令行执行存储过程_mysql 命令行执行存储过程
  10. oracle实现主键自增长及自动生成策略