题目大意:
对数组进行任意次操作:选择相邻且相等的数,合并成一个比原来大1的数
问:数组的最小长度是多少?

思路:
区间DP
用dp[1][n]来记录最终的答案
经典的转移方程:dp[i][r]=min(dp[i][r],dp[i][k]+dp[k+1][r]),但没考虑如何合并.

怎样考虑合并呢?

从最原始的数组上观察,若[i,i],[r,r]区间长度为1,并且[i,i],[r,r]的值相等且相邻,那么就可以对[i,r]区间进行合并,合并后得到一种新状态。
怎样记录并表示新状态呢? 引入俩数组:

1.dp[i][j] 表示区间[i,j]的长度
2.w[i][j] 表示区间[i,j]的数值:其值只有在区间合并时才能被修改。

这样的话,新状态就可以表示为:
1.dp[i][r]=1;//合并完后 [i,r]成为1个数,表示[i,r]这个区间的状态可能可以用于下次合并。
2.w[i][r]=w[i]i+1;

格局一升,上升到普遍状态:
dp[i,k],dp[k+1,r] 的长度为1,并且w[i,k],w[k+1,r]的值相等,进行合并即可:
dp[i][r]=1;
w[i][r]=w[i][k]+1;((((或w[k+1][r]+1.
Code:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define rep(i,j,n) for(int i=j;i<=n;i++)
const int N=1e3+9;
int aa[N],dp[N][N],w[N][N];
int main() {int n;cin>>n;rep(i,1,n) cin>>w[i][i],dp[i][i]=1;rep(i,1,n) {rep(k,1,n) {dp[i][k] = k-i+1;//记录区间长度}}rep(len,1,n) { //区间长度for(int i=1; i+len<=n; i++) { //区间起点int r=i+len;//终点rep(k,i,r-1) {//间断点dp[i][r]=min(dp[i][r],dp[i][k]+dp[k+1][r]);if(dp[i][k]==1&&dp[k+1][r]==1&&w[i][k]==w[k+1][r]) {dp[i][r]=1;w[i][r]=w[i][k]+1;}}}}cout<<dp[1][n];return 0;
}

参考的博客

Array Shrinking(区间DP)相关推荐

  1. CodeForces - 1312E Array Shrinking(区间dp)(通俗易懂)

    CodeForces - 1312E Array Shrinking(区间dp) 题目链接: 没做出来,看了一下别人的题解,才A掉.但网上没发现一篇讲得比较易懂的题解,所以就准备写一篇再加上我自己的理 ...

  2. CodeForces - 1312E Array Shrinking(区间dp)

    题目链接:点击查看 题目大意:给出 n 个数,现在可执行的操作是: 找到相邻且数值相等的两个数,即 abs( i - j ) == 1 && a[ i ] == a[ j ] 使得两个 ...

  3. 0x53. 动态规划 - 区间DP(习题详解 × 8)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 文章目录 0x53. 动态规划 - 区间DP Problem A. 最优矩阵链乘 Problem B. ...

  4. 天池 在线编程 拿走瓶子(区间DP)

    文章目录 1. 题目 2. 解题 1. 题目 描述 有n个瓶子排成一列,用arr表示. 你每次可以选择能够形成回文连续子串的瓶子拿走,剩下的瓶子拼接在一起. 返回你能拿走所有的瓶子的最小次数. n&l ...

  5. [CF1107E]Vasya and Binary String【区间DP】

    题目描述 Vasya has a string s of length n consisting only of digits 0 and 1. Also he has an array a of l ...

  6. POJ 2955 Brackets (区间DP)

    题目链接:http://poj.org/problem?id=2955 Brackets Time Limit: 1000MS   Memory Limit: 65536K Total Submiss ...

  7. UVA1626 括号序列 Brackets sequence(区间DP匹配括号,输出匹配方案)

    整理的算法模板合集: ACM模板 UVA1626 Brackets sequence 我们将正规括号序列定义如下: 空序列是正规括号序列. 如果 SSS 是一个正规括号序列,那么 (S) 和 [S] ...

  8. UVA10003 切木棍 Cutting Sticks(区间DP、细节)

    整理的算法模板合集: ACM模板 本题其实就是一个区间DP 的模板题,总长度为len,有n个切割点,也就是说能被切割成n+1段,所以左边界是0,有边界是n + 1,所以答案就是f[0][n + 1]. ...

  9. 【动态规划】区间DP - 最优矩阵链乘(另附POJ1651Multiplication Puzzle)

    最优矩阵链乘(动态规划) 一个n∗mn*mn∗m的矩阵由 nnn 行 mmm 列共 n∗mn*mn∗m 排列而成.两个矩阵A和B可以相乘当且仅当A的列数等于B的行数.一个nm的矩阵乘mp的矩阵,运算量 ...

  10. 【每日DP】day13、P3147 [USACO16OPEN]262144 (区间DP,2048游戏)难度⭐⭐⭐★

    P3147 [USACO16OPEN]262144 P 想到合并,自然就想到区间dp,一个被合成的数之前是一个区间,并且由两个数比它小 111 的区间合成.可麻烦的是,我们并不知道之前的两个区间长度各 ...

最新文章

  1. 【经典问题】maximum subset sum of vectors
  2. array_keys_PHP array_keys()函数与示例
  3. MongoDB 教程番外篇之管理工具: Rockmongo
  4. matplotlib+numpy绘制二维条形直方图
  5. WPF学习(3) – WPF控件
  6. 中小SAP项目中的人员编制(转)
  7. 【Leetcode】【Regular Expression Matching】【正则表达式匹配】【C++】
  8. 17.2融合关键词的文本增强
  9. SpringMVC国际化(i18n)(五)
  10. Winform 五种常用对话框控件的简单使用
  11. 苹果屏蔽更新_苹果手机屏蔽IOS更新描述文件失效,越狱用户的紧急解决方案
  12. 计算机常见故障英语,常见电脑黑屏(有英文字母)的解决办法
  13. vivado2017.4开发vc707(virtex7)(一)上电调试
  14. 系统提速,Windows Ready Boost,使用闪存设备提高性能
  15. oCPC实践录 | 成本优化策略之eCPC(2)
  16. iPad的尺寸与分辨率
  17. 电脑通信端口带感叹号,WIN7设备管理器里面的端口前面有个黄色感叹号怎么解决?...
  18. TortoiseSVN不会弹出认证(账号密码)或 TortoiseSVN正在启动版本库浏览器
  19. 陆奇最新演讲高清PPT下载;AI 绘画20+工具体验汇总;我愿称MOSS为全球开源界最强;思否AIGC黑客马拉松北京站 | ShowMeAI日报
  20. Java部分集合以及部分常用类

热门文章

  1. PIE-engine APP 教程 ——太湖生态环境智能监测系统
  2. dayjs格式化使用
  3. 域名收敛和域名发散(分散)
  4. 【月光博客】腾讯微信推出广告联盟
  5. 如何下载哔哩哔哩(bilibili)网页端视频
  6. 2015级计算机科学与技术2班班级博客大全
  7. WZOI-264合唱队形
  8. 停课集训 11.27
  9. 阿里巴巴江苏云计算数据中心项目在南通开工 项目一期计划2019年建成运营
  10. 帝国CMS系统标签e:loop调用的附加SQL条件和排序参数