【非原创】codeforces - 1067A Array Without Local Maximums【dp】
学习博客:戳这里
附本人代码:
1 #include <bits/stdc++.h>
2 using namespace std;
3 typedef long long ll;
4 const int maxn = 1e5 + 10;
5 const ll mod = 998244353;
6 set<int>nu[maxn], rol[2];
7 int a[maxn];
8 ll dp[maxn][222][3];
9 int main() {
10 int n;
11 scanf("%d", &n);
12 for(int i = 1; i <= n; ++i) {
13 scanf("%lld", a+i);
14 }
15 //处理边界
16 if(a[1] == -1) {
17 for(int i = 1; i <= 200; ++i) {
18 dp[1][i][0] = 1ll;
19 }
20 } else {
21 dp[1][a[1]][0] = 1ll;
22 }
23 for(int i = 2; i <= n; ++i) {
24 ll sum = 0;
25 int len = 200;
26 if(a[i] != -1) len = a[i];
27 for(int j = 1; j <= len; ++j) { // >
28 if(a[i] == -1 || j == a[i])
29 dp[i][j][0] = (dp[i][j][0] + sum) % mod;
30 for(int k = 0; k < 3; ++k) {
31 sum = (sum + dp[i - 1][j][k]) % mod;
32 }
33 }
34 for(int j = 1; j <= len; ++j) { // ==
35 for(int k = 0; k < 3; ++k) {
36 if(a[i] == -1 || j == a[i])
37 dp[i][j][1] = (dp[i][j][1] + dp[i - 1][j][k]) % mod;
38 }
39 }
40 if(i == 2) continue;
41 len = 1;
42 if(a[i] != -1) len = a[i];
43 sum = 0;
44 for(int j = 200; j >= len; --j) { // <
45 if(a[i] == -1 || j == a[i])
46 dp[i][j][2] =(dp[i][j][2] + sum) % mod;
47 for(int k = 1; k < 3; ++k) {
48 sum = (sum + dp[i - 1][j][k]) % mod;
49 }
50 }
51 }
52 ll ans = 0;
53 for(int j = 1; j <= 200; ++j) {
54 for(int k = 1; k < 3; ++k) {
55 if(a[n] == -1 || j == a[n])
56 ans = (ans + dp[n][j][k]) % mod;
57 }
58 }
59 printf("%lld\n", ans);
60 return 0;
61 }
【非原创】codeforces - 1067A Array Without Local Maximums【dp】的更多相关文章
- codeforces 1068d Array Without Local Maximums dp
题目传送门 题目大意:给出一个长度为n的数组,这个数组有的数是给出的,有的数是固定的,且范围都在[1,200]之间,要求这个数组中,每一个数字都小于等于 前后两个数字的最大值,求方案数mod p. 思 ...
- 【计数dp】Array Without Local Maximums
参考博客:[CF1068D]Array Without Local Maximums(计数DP) [题意] n<=1e5 dp[i][j][k]表示当前第i个数字为j,第i-1个数字与第i个之间 ...
- 【CF1068D】Array Without Local Maximums(计数DP)
题意: n<=1e5 思路:卡内存 dp[i][j][k]表示当前第i个数字为j,第i-1个数字与第i个之间大小关系为k的方案数(a[i-1]<a[i],=,>) 转移时使用前缀和和 ...
- 「题解报告」CF1067A Array Without Local Maximums
大佬们的题解都太深奥了,直接把转移方程放出来让其他大佬们感性理解,蒟蒻们很难理解,所以我就写了一篇让像我一样的蒟蒻能看懂的题解 原题传送门 动态规划三部曲:确定状态,转移方程,初始状态和答案. --神 ...
- tp5.1 phpspreadsheet- 工具类 导入导出(整合优化,非原创,抄一抄,加了一些自己的东西,)
phpspreadsheet-工具类 导入导出(整合优化,非原创,抄一抄,加了一些自己的东西)1. composer require phpoffice/phpspreadsheet2. 看最下面的两 ...
- Linux下high CPU分析心得【非原创】
非原创,搬运至此以作笔记, 原地址:http://www.cnitblog.com/houcy/archive/2012/11/28/86801.html 1.用top命令查看哪个进程占用CPU高ga ...
- CSS样式命名整理(非原创)
非原创,具体出自哪里忘了,如果侵害您的利益,请联系我. CSS样式命名整理 页面结构 容器: container/wrap 整体宽度:wrapper 页头:header 内容:content 页面主体 ...
- 非原创。使用ajax加载控件
非原创.来自博客园老赵. public class ViewManager<T> where T : System.Web.UI.UserControl { private System. ...
- Java 表达式解析(非原创)
因项目需要,在网上找来一套表达式解析方法,由于原来的方法太过于零散,不利于移植,现在整理在同一文件内: 文件中包含5个内部类,源码如下: import java.util.ArrayList; imp ...
随机推荐
- 第一章:起步(python环境搭建)
Python 环境搭建 学习python的第一步,就是要学习python开发环境的配置,在配置好python开发环境后,你需要再安装一款比较趁手的编辑器,事实上,python解释器本身就可以进行一些编 ...
- saltstack 服务器批量管理
学习saltstack 服务器批量管理 1.saltstack 简介 SaltStack是一个开源的.新的基础平台管理工具,使用Python语言开发,同时提供Rest API方便二次开发以及和其他运维 ...
- Navicat 创建mysql存过、定时执行存过
创建存过: 使用Navicat for MySQL工具创建存储过程步骤: 1. 新建函数(选择函数标签 -> 点击新建函数): 2.输入函数的参数个数.参数名.参数类型等: 3.编写存储过程: ...
- Ubuntu14.04系统安装
1. 使用U盘或光盘进行引导进入系统安装向导. 2. 安装类型选择,选择中文(简体).然后点安装ubuntu. 3. 安装ubuntu电脑必须接入外网(外网的方式有自动获取或手动编辑IP地址). 网络 ...
- TCP 延迟
https://mp.weixin.qq.com/s/fKWJrDNSAZjLsyobolIQKw 直击案发现场!TCP 10倍延迟的真相是? 原创 蛰剑 阿里技术 2019-11-01
- Linux进程内存用量分析之堆内存篇
https://mp.weixin.qq.com/s/a6mLMDinYQGUSaOsGYCEaA 独家|Linux进程内存用量分析之堆内存篇 姬晨烜 58技术 2019-12-06 导语 本文将介绍 ...
- tee MultiWriter creates a writer that duplicates its writes to all the // provided writers, similar to the Unix tee(1) command.
https://zh.wikipedia.org/wiki/Tee 在计算机科学中,tee是一个常见的指令,它能够将某个指令的标准输出,导向.存入某个档案中.许多不同的命令行界面(Shell)都提供这 ...
- automake的简单使用
https://blog.csdn.net/zhengqijun_/article/details/70105077 xxxxx https://blog.csdn.net/initphp/artic ...
- 正则re高级用法
search 需求:匹配出文章阅读的次数 #coding=utf-8 import re ret = re.search(r"\d+", "阅读次数为 9999" ...
- (十四)整合 ClickHouse数据库,实现数据高性能查询分析
整合 ClickHouse数据库,实现数据高性能查询分析 1.ClickHouse简介 1.1 数据分析能力 2.SpringBoot整个ClickHouse 2.1 核心依赖 2.2 配属数据源 2 ...