Array Shrinking(区间DP)
题目大意:
对数组进行任意次操作:选择相邻且相等的数,合并成一个比原来大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)相关推荐
- CodeForces - 1312E Array Shrinking(区间dp)(通俗易懂)
CodeForces - 1312E Array Shrinking(区间dp) 题目链接: 没做出来,看了一下别人的题解,才A掉.但网上没发现一篇讲得比较易懂的题解,所以就准备写一篇再加上我自己的理 ...
- CodeForces - 1312E Array Shrinking(区间dp)
题目链接:点击查看 题目大意:给出 n 个数,现在可执行的操作是: 找到相邻且数值相等的两个数,即 abs( i - j ) == 1 && a[ i ] == a[ j ] 使得两个 ...
- 0x53. 动态规划 - 区间DP(习题详解 × 8)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 文章目录 0x53. 动态规划 - 区间DP Problem A. 最优矩阵链乘 Problem B. ...
- 天池 在线编程 拿走瓶子(区间DP)
文章目录 1. 题目 2. 解题 1. 题目 描述 有n个瓶子排成一列,用arr表示. 你每次可以选择能够形成回文连续子串的瓶子拿走,剩下的瓶子拼接在一起. 返回你能拿走所有的瓶子的最小次数. n&l ...
- [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 ...
- POJ 2955 Brackets (区间DP)
题目链接:http://poj.org/problem?id=2955 Brackets Time Limit: 1000MS Memory Limit: 65536K Total Submiss ...
- UVA1626 括号序列 Brackets sequence(区间DP匹配括号,输出匹配方案)
整理的算法模板合集: ACM模板 UVA1626 Brackets sequence 我们将正规括号序列定义如下: 空序列是正规括号序列. 如果 SSS 是一个正规括号序列,那么 (S) 和 [S] ...
- UVA10003 切木棍 Cutting Sticks(区间DP、细节)
整理的算法模板合集: ACM模板 本题其实就是一个区间DP 的模板题,总长度为len,有n个切割点,也就是说能被切割成n+1段,所以左边界是0,有边界是n + 1,所以答案就是f[0][n + 1]. ...
- 【动态规划】区间DP - 最优矩阵链乘(另附POJ1651Multiplication Puzzle)
最优矩阵链乘(动态规划) 一个n∗mn*mn∗m的矩阵由 nnn 行 mmm 列共 n∗mn*mn∗m 排列而成.两个矩阵A和B可以相乘当且仅当A的列数等于B的行数.一个nm的矩阵乘mp的矩阵,运算量 ...
- 【每日DP】day13、P3147 [USACO16OPEN]262144 (区间DP,2048游戏)难度⭐⭐⭐★
P3147 [USACO16OPEN]262144 P 想到合并,自然就想到区间dp,一个被合成的数之前是一个区间,并且由两个数比它小 111 的区间合成.可麻烦的是,我们并不知道之前的两个区间长度各 ...
最新文章
- 【经典问题】maximum subset sum of vectors
- array_keys_PHP array_keys()函数与示例
- MongoDB 教程番外篇之管理工具: Rockmongo
- matplotlib+numpy绘制二维条形直方图
- WPF学习(3) – WPF控件
- 中小SAP项目中的人员编制(转)
- 【Leetcode】【Regular Expression Matching】【正则表达式匹配】【C++】
- 17.2融合关键词的文本增强
- SpringMVC国际化(i18n)(五)
- Winform 五种常用对话框控件的简单使用
- 苹果屏蔽更新_苹果手机屏蔽IOS更新描述文件失效,越狱用户的紧急解决方案
- 计算机常见故障英语,常见电脑黑屏(有英文字母)的解决办法
- vivado2017.4开发vc707(virtex7)(一)上电调试
- 系统提速,Windows Ready Boost,使用闪存设备提高性能
- oCPC实践录 | 成本优化策略之eCPC(2)
- iPad的尺寸与分辨率
- 电脑通信端口带感叹号,WIN7设备管理器里面的端口前面有个黄色感叹号怎么解决?...
- TortoiseSVN不会弹出认证(账号密码)或 TortoiseSVN正在启动版本库浏览器
- 陆奇最新演讲高清PPT下载;AI 绘画20+工具体验汇总;我愿称MOSS为全球开源界最强;思否AIGC黑客马拉松北京站 | ShowMeAI日报
- Java部分集合以及部分常用类