传送门

  • 题目:
  • 思路:
    数组中的某些数可以通过执行多次题目中的操作最终归为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)相关推荐

  1. 【ARC064-F】【XSY2575】Rotated Palindromes(DP)(字符串)

    Description 然而,由于小C沉迷于制作游戏,他完全忘记了自己作为国家集训队的一员,还有156道作业题等他完成.还有一天作业就要截止了,而他一题还没有做.于是他赶紧挑了一道看起来最简单的题: ...

  2. 【CF480E】Parking Lot(DP)(单调性)

    传送门 题解: 为什么我会在某人的数据结构讲义里面看到这道题... 首先我们可以DP求出最大子正方形,设f[i][j]f[i][j]f[i][j]表示以i,ji,ji,j为右下角的最大正方形边长,则对 ...

  3. 【UVa】Wavio Sequence(dp)

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...

  4. 【状压DP】【cofun1373】中国象棋(cchess)

    [cofun1373]中国象棋(cchess) Description 在N行M列的棋盘上,放若干个炮(可以是0个),使得没有任何一个炮可以攻击另一个炮. 请问有多少种放置方法,中国象棋中炮的行走方式 ...

  5. 【CF 149D】Coloring Brackets(dp)

    [CF 149D]Coloring Brackets(dp) D. Coloring Brackets time limit per test 2 seconds memory limit per t ...

  6. 【GAMES101】作业3(提高)与法线贴图原理和渲染管线框架分析

    目录 1. 作业描述 1.1 任务 1.2 编译与运行 1.3 框架与代码说明 2. 需要注意的问题 3. 解 3.1 rasterize_triangle 3.2 get_projection_ma ...

  7. 【分享】常用JS(2)

    ============================================== 1.文本框焦点问题 onBlur:当失去输入焦点后产生该事件 onFocus:当输入获得焦点后,产生该文件 ...

  8. 【 MATLAB 】离散傅里叶变换(DFT)以及逆变换(IDFT)的MATLAB实现

    刚刚写过一篇用MATLAB实现离散傅里叶级数的博文,如下: [ MATLAB ]离散傅里叶级数(DFS)及 IDFS 的 MATLAB 实现 离散傅里叶变换不是一种神奇的东西,它和离散傅里叶级数关系很 ...

  9. 【JDK7】新特性(8) 异步io/AIO

    2019独角兽企业重金招聘Python工程师标准>>> 概述     JDK7引入了Asynchronous I/O.I/O编程中,常用到两种模式:Reactor 和 Proacto ...

  10. 【ML】欠拟合(underfitting)和 过拟合(overfitting)实践(基于sklearn)

    [ML]欠拟合(underfitting)和 过拟合(overfitting)实践(基于sklearn) 数据集 加载数据 可视化数据 一阶模型(欠拟合) 训练 预测+评估 可视化 二级模型(符合要求 ...

最新文章

  1. 肠菌亦“醉”人 | 中国团队登Cell子刊,发现60%的非酒精性脂肪肝与肠道菌有关,携带者体内酒精可达健康人4-6倍...
  2. c++函数内部可以返回函数内部定义的指针 但是不能返回函数内部定义的数组...
  3. android sco通信,android – startBluetoothSco()在ICS上抛出安全异常(BROADCAST_STICKY)
  4. CentOS 7.0下使用yum安装MySQL
  5. 在 python中每个模块用什么来实现_Python代码模块热更新机制实现(reload)
  6. python打开360浏览器_python selenium使用360浏览器出现新皮肤设置怎么办?
  7. 滑动窗口算法_有点难度,几道和「滑动窗口」有关的算法面试题
  8. mysql管理员就业_MySQL管理员必备的十大工具盘点
  9. LIDAR in Google Earth
  10. 野生前端的数据结构基础练习(8)——图
  11. 巩固知识体系!mysql变量类型
  12. js结束当前循环关键词_干货||什么是事件循环机制
  13. C语言-输入任意多个数字,数字间用空格隔开,然后将数字求和。
  14. 百度文库复制文字代码
  15. R语言学习(五)——聚类分析
  16. Non-static method 'save(java.long.Object)' cannot be referenced from a static context.
  17. BitSet源码解析,位运算玩的真六
  18. 台式计算机上的fn键是哪个,电脑键盘上Fn键到底有什么用?
  19. php 问卷调查,使用php问卷调查结果统计
  20. android 系统重新安装,一招学会安卓手机系统重装教程

热门文章

  1. 7、重建二叉树(Python)
  2. QProcess解决无交互输入密码问题
  3. 启动不起来_汽车没电发动不起来咋办?老司机平时都用这几种方法,简单有效...
  4. vmware+player+12+linux,Vmware player 12
  5. uniapp —— 配合腾讯地图实现小程序自动定位
  6. linux安装jdk详细步骤,需要有一定的语法基础
  7. java 基本语法与流程控制_java基础语法2-运算符与流程控制
  8. 项目中css初始化通用代码(源码,直接套)
  9. 探讨如何在有着1000万条数据的MS SQL SERVER数据库中实现快速的数据提取和数据分页...
  10. 【leetcode】1041. Robot Bounded In Circle