Codeforces Round #518 (Div. 2): D. Array Without Local Maximums(DP)
题意:
有一个长度为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)相关推荐
- Codeforces Round #509 (Div. 2) F. Ray in the tube(思维)
题目链接:http://codeforces.com/contest/1041/problem/F 题意:给出一根无限长的管子,在二维坐标上表示为y1 <= y <= y2,其中 y1 上 ...
- Codeforces Round #318 (Div. 2) B Bear and Three Musketeers (暴力)
算一下复杂度.发现可以直接暴.对于u枚举a和b,判断一下是否连边,更新答案. #include<bits/stdc++.h> using namespace std;int n,m; co ...
- Codeforces Round #641 (Div. 2) D. Orac and Medians 题解(思维)
题目链接 题目大意 就是数组里一段数可以都变成他的中位数,问整个序列能不能变成k.可以变化很多次 题目思路 emmm,根本没什么思路,看了题解感觉根本想不到啊,但是仔细想想其实确实应该那么想. 先令a ...
- Codeforces Round #645 (Div. 2) E - Are You Fired? 题解(思维)
题目链接 题目大意 给你一个长为n的数组前(n+1)/2个数为a[i],后面的数为x,让你求出一个长度k使其所有连续为k的数组之和都大于0 题目思路 首先要找性质,如果k满足,那么显然k*2也满足那么 ...
- 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 ...
- Codeforces Round #459 (Div. 2) C 思维,贪心 D 记忆化dp
Codeforces Round #459 (Div. 2) C. The Monster 题意:定义正确的括号串,是能够全部匹配的左右括号串. 给出一个字符串,有 (.). ? 三种字符, ? 可以 ...
- Codeforces Round #579 (Div. 3) F2. Complete the Projects (hard version) dp + 贪心
传送门 文章目录 题意: 思路: 题意: 思路: 排序方式跟easyeasyeasy版本的一样,但是hardhardhard版本是输出最多能选多少,所以我们对b<0b<0b<0的情况 ...
- Codeforces Round #590 (Div. 3) F. Yet Another Substring Reverse 子集dp
传送门 文章目录 题意: 思路: 题意: 思路: 之前做过类似的题,翻转一个字串相当于将任意两个不相交的串连在一起.再一看字符集≤20\le20≤20,那就是铁子集dpdpdp了. 定义f[i]f[i ...
- 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 ...
最新文章
- SAP QM 事务代码QA11里的to New Material
- 简单理解Ext.DomQuery操作CSS3选择器
- 频谱泄露 振动 matlab,关于MATLAB FFT频谱泄露和加窗
- docker-compose执行报错(selinux所致):write /proc/self/attr/keycreate: permission denied
- 常见的http状态码
- 前端学习(358):svn安装
- python excel 单元格格式_python设置单元格数值格式
- gettimeofday函数使用《代码》
- 回收站有html文件,回收站在哪个盘?(每个磁盘上都有一个回收站)
- android 4.4 webview 上传,android使用webview上傳文件(適配4.4以上系統)
- 胡桂珍c语言期末考试题,C程序设计教程
- ANDROID AIDL 1
- 理解数据库设计范式【转】
- java获取键盘输入
- Oracle禁止connect / as sysdba方式登录
- 苹果cmsV10资源采集插件
- 16种常用的数据分析方法-聚类分析
- mysql是bsd协议吗_五种开源协议(GPL,LGPL,BSD,MIT,Apache)介绍
- 最小二乘法以及正交最小二乘(OLS)的推导与简单比较
- bash ps1变量_Shell PS1变量:命令提示符设置
热门文章
- 线上python课程一般多少钱-Python在线培训课程费用是多少?值不值得报名?
- python爬虫-Python 爬虫介绍
- 怎么实现语音识别_手机语音识别怎么设置
- 插槽作用域渲染按钮开关 ~ 满满的干货哦
- Media Player Classic - HC 源代码分析 3:核心类 (CMainFrame)(2)
- android viewpager 缩放,android – 使用ViewPager实现捏缩放
- c语言从excal读取字符串,C语言操作EXCEL文件(读写)
- python 删除断点_给python 初学者的四条忠告,减少一些没必要的麻烦
- mysql 命令行执行存储过程_mysql 命令行执行存储过程
- oracle实现主键自增长及自动生成策略