【CF1312E】Array Shrinking(dp)
传送门
- 题目:
- 思路:
数组中的某些数可以通过执行多次题目中的操作最终归为1个数。
先确定每个r(1≤r≤n)r(1≤r≤n)r(1≤r≤n)有哪些l(1≤l≤r)l(1≤l≤r)l(1≤l≤r)满足[l,r][l,r][l,r]内的数可以归为1个数。在处理的时候可以先枚举lll,这样rrr每次都只增加1。且[l,oldr][l,oldr][l,oldr]的结果已知,[l,newr][l,newr][l,newr]只是在[l,oldr][l,oldr][l,oldr]在多考虑一个数字而已,用栈模拟。
dp[i]dp[i]dp[i]表示[1,i][1,i][1,i]内可以形成的答案数,dp[i]=min{dp[j−1]+1}dp[i]=min\{dp[j-1]+1\}dp[i]=min{dp[j−1]+1},其中j是由前面的处理得到的满足[j,i][j,i][j,i]内的数能归为1个数的下标。
最终答案是dp[n]dp[n]dp[n],时间复杂度O(n2)O(n^2)O(n2) - ac代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 550;
const ll mod = 998244353;
int n;
int dp[maxn], a[maxn];
vector<int> v[maxn];
stack<int> s;
bool check(int x)
{while(!s.empty() && s.top()==x){x = x+1;s.pop();}s.push(x);if(s.size()==1) return true;else return false;
}
int main()
{//freopen("/Users/zhangkanqi/Desktop/11.txt","r",stdin);scanf("%d", &n);for(int i = 1; i <= n; i++) scanf("%d", &a[i]);for(int l = 1; l <= n; l++){while(!s.empty()) s.pop();for(int r = l; r <= n; r++)if(check(a[r])) v[r].push_back(l);}for(int i = 1; i <= n; i++) dp[i] = INT_MAX;for(int r = 1; r <= n; r++)for(auto l : v[r])dp[r] = min(dp[r], dp[l-1]+1);printf("%d\n", dp[n]);return 0;
}
【CF1312E】Array Shrinking(dp)相关推荐
- 【ARC064-F】【XSY2575】Rotated Palindromes(DP)(字符串)
Description 然而,由于小C沉迷于制作游戏,他完全忘记了自己作为国家集训队的一员,还有156道作业题等他完成.还有一天作业就要截止了,而他一题还没有做.于是他赶紧挑了一道看起来最简单的题: ...
- 【CF480E】Parking Lot(DP)(单调性)
传送门 题解: 为什么我会在某人的数据结构讲义里面看到这道题... 首先我们可以DP求出最大子正方形,设f[i][j]f[i][j]f[i][j]表示以i,ji,ji,j为右下角的最大正方形边长,则对 ...
- 【UVa】Wavio Sequence(dp)
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...
- 【状压DP】【cofun1373】中国象棋(cchess)
[cofun1373]中国象棋(cchess) Description 在N行M列的棋盘上,放若干个炮(可以是0个),使得没有任何一个炮可以攻击另一个炮. 请问有多少种放置方法,中国象棋中炮的行走方式 ...
- 【CF 149D】Coloring Brackets(dp)
[CF 149D]Coloring Brackets(dp) D. Coloring Brackets time limit per test 2 seconds memory limit per t ...
- 【GAMES101】作业3(提高)与法线贴图原理和渲染管线框架分析
目录 1. 作业描述 1.1 任务 1.2 编译与运行 1.3 框架与代码说明 2. 需要注意的问题 3. 解 3.1 rasterize_triangle 3.2 get_projection_ma ...
- 【分享】常用JS(2)
============================================== 1.文本框焦点问题 onBlur:当失去输入焦点后产生该事件 onFocus:当输入获得焦点后,产生该文件 ...
- 【 MATLAB 】离散傅里叶变换(DFT)以及逆变换(IDFT)的MATLAB实现
刚刚写过一篇用MATLAB实现离散傅里叶级数的博文,如下: [ MATLAB ]离散傅里叶级数(DFS)及 IDFS 的 MATLAB 实现 离散傅里叶变换不是一种神奇的东西,它和离散傅里叶级数关系很 ...
- 【JDK7】新特性(8) 异步io/AIO
2019独角兽企业重金招聘Python工程师标准>>> 概述 JDK7引入了Asynchronous I/O.I/O编程中,常用到两种模式:Reactor 和 Proacto ...
- 【ML】欠拟合(underfitting)和 过拟合(overfitting)实践(基于sklearn)
[ML]欠拟合(underfitting)和 过拟合(overfitting)实践(基于sklearn) 数据集 加载数据 可视化数据 一阶模型(欠拟合) 训练 预测+评估 可视化 二级模型(符合要求 ...
最新文章
- 肠菌亦“醉”人 | 中国团队登Cell子刊,发现60%的非酒精性脂肪肝与肠道菌有关,携带者体内酒精可达健康人4-6倍...
- c++函数内部可以返回函数内部定义的指针 但是不能返回函数内部定义的数组...
- android sco通信,android – startBluetoothSco()在ICS上抛出安全异常(BROADCAST_STICKY)
- CentOS 7.0下使用yum安装MySQL
- 在 python中每个模块用什么来实现_Python代码模块热更新机制实现(reload)
- python打开360浏览器_python selenium使用360浏览器出现新皮肤设置怎么办?
- 滑动窗口算法_有点难度,几道和「滑动窗口」有关的算法面试题
- mysql管理员就业_MySQL管理员必备的十大工具盘点
- LIDAR in Google Earth
- 野生前端的数据结构基础练习(8)——图
- 巩固知识体系!mysql变量类型
- js结束当前循环关键词_干货||什么是事件循环机制
- C语言-输入任意多个数字,数字间用空格隔开,然后将数字求和。
- 百度文库复制文字代码
- R语言学习(五)——聚类分析
- Non-static method 'save(java.long.Object)' cannot be referenced from a static context.
- BitSet源码解析,位运算玩的真六
- 台式计算机上的fn键是哪个,电脑键盘上Fn键到底有什么用?
- php 问卷调查,使用php问卷调查结果统计
- android 系统重新安装,一招学会安卓手机系统重装教程
热门文章
- 7、重建二叉树(Python)
- QProcess解决无交互输入密码问题
- 启动不起来_汽车没电发动不起来咋办?老司机平时都用这几种方法,简单有效...
- vmware+player+12+linux,Vmware player 12
- uniapp —— 配合腾讯地图实现小程序自动定位
- linux安装jdk详细步骤,需要有一定的语法基础
- java 基本语法与流程控制_java基础语法2-运算符与流程控制
- 项目中css初始化通用代码(源码,直接套)
- 探讨如何在有着1000万条数据的MS SQL SERVER数据库中实现快速的数据提取和数据分页...
- 【leetcode】1041. Robot Bounded In Circle