Solution

先放一下自己的错误代码:

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;const int N = 505;int n, a[N], dp[N][N];int read() {int x = 0, f = 1; char s;while((s = getchar()) > '9' || s < '0') if(s == '-') f = -1;while(s >= '0' && s <= '9') x = (x << 1) + (x << 3) + (s ^ 48), s = getchar();return x * f;
}int main() {n = read(); memset(dp, 0x3f, sizeof dp);for(int i = 1; i <= n; ++ i) a[i] = read(), dp[i][i] = 1;for(int len = 2; len <= n; ++ len)for(int i = 1; i <= n - len + 1; ++ i) {int j = i + len - 1;for(int k = i + 1; k < j - 1; ++ k)if(a[k] == a[k + 1])dp[i][j] = min(dp[i][j], dp[i][k - 1] + dp[k + 2][j] + 1);for(int k = i; k < j; ++ k) dp[i][j] = min(dp[i][j], dp[i][k] + dp[k + 1][j]);}printf("%d\n", dp[1][n]);return 0;
}

错误点在于,我只是把数删除,却没有加入 a[i]+1a[i] + 1a[i]+1。

怎么搞?回想自己的思路,将两个数列因为相等的 a[k],a[k+1]a[k],a[k+1]a[k],a[k+1] 连接,根本就不知道 a[i]+1a[i]+1a[i]+1 放哪。

其实可以将思路简化,只考虑两个数的合并情况然后用 a[i]+1a[i]+1a[i]+1 覆盖。因为长度是从小到大枚举的,a[i]+1a[i]+1a[i]+1 肯定也可和附近的数合并。可以另开一个数组 w[i][j]w[i][j]w[i][j] 表示合并后的权值。

Code

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;const int N = 505;int n, a[N], dp[N][N], w[N][N];int read() {int x = 0, f = 1; char s;while((s = getchar()) > '9' || s < '0') if(s == '-') f = -1;while(s >= '0' && s <= '9') x = (x << 1) + (x << 3) + (s ^ 48), s = getchar();return x * f;
}int main() {n = read(); memset(dp, 0x3f, sizeof dp);for(int i = 1; i <= n; ++ i) a[i] = read(), dp[i][i] = 1, w[i][i] = a[i];for(int len = 2; len <= n; ++ len)for(int i = 1; i <= n - len + 1; ++ i) {int j = i + len - 1;for(int k = i; k < j; ++ k) {dp[i][j] = min(dp[i][j], dp[i][k] + dp[k + 1][j]);if(dp[i][k] == 1 && dp[k + 1][j] == 1 && w[i][k] == w[k + 1][j])dp[i][j] = 1, w[i][j] = w[i][k] + 1;}}printf("%d\n", dp[1][n]);return 0;
}

CodeForces - 1312E Array Shrinking相关推荐

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

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

  2. codeforces 1312E. Array Shrinking

    https://codeforces.com/problemset/problem/1312/E 傻逼DP又写了快40分钟,迟早药丸 这题之前总是按传统的区间dp想维护i,j的最多合并次数,怎么维护左 ...

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

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

  4. codeforces E. Array Shrinking

    题目 题意: 给你一组序列,序列中相邻的两个一样的值可以合并成一个值+1的数,问最后剩下的最少的元素有多少个. 思路: 本来我的思路是用栈或者队列的方式去合并,然后输出元素的个数,但是发现假如1 1 ...

  5. CodeForces - 1547F Array Stabilization (GCD version)(ST表+二分)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的数组 aaa,下标从 000 开始,每次操作分为两个步骤: 构建出数组 bbb,有 bi=gcd(ai,a(i+1)modn)b_i=gcd(a ...

  6. 网络流(最大流):CodeForces 499E Array and Operations

    You have written on a piece of paper an array of n positive integers a[1], a[2], ..., a[n] and m goo ...

  7. CodeForces - 1454F Array Partition(线段树+二分)

    题目链接:点击查看 题目大意:给出一个长度为 n 的序列,现在要求求出任意一组 x , y , z,满足下列条件: x + y + z = n max( 1 , x ) = min( x + 1 , ...

  8. Codeforces 57C Array dp暴力找到规律

    主题链接:点击打开链接 的非增量程序首先,计算, 如果不增加的节目数量x, 非减少一些方案是x 答案就是 2*x - n 仅仅需求得x就可以. 能够先写个n3的dp,然后发现规律是 C(n-1, 2* ...

  9. Codeforces 623B Array GCD 数论,dp

    文章目录 题意 题解 题意 一个序列每个数都大于111,要使整个数列的最大公约数大于111,可以最多删除一个子串,每一个数花费aaa元,也可以给一个数增添111或者减少111,每个数最多操作一次.求达 ...

  10. Codeforces 1474C.Array Destruction

    题目链接 题意: 给出一个2n个数的序列,一开始你可以任选一个x值,然后在序列中找到两个数,使得这两个数的和等于x.然后删除这两个数,并让x等于这两个数中的最大值.直到整个序列全部被删除为止. 问:求 ...

最新文章

  1. javascript中闭包的一些理解
  2. Oracle语句生成+存储过程测试工具发布:Easytran V0.1
  3. sql两个数字之差取最接近的_从零学DAX/Sql/Python030203SQL数据分类汇总续篇
  4. iOS 证书相关概念
  5. Python3安装(Linux)
  6. POJ1338 Ugly Numbers
  7. Java基础编程题——水仙花数
  8. 网站开发执行文档(页面界面和功能说明文档)编写方法
  9. iPhone 14来了,苹果13和14区别,值不值得买
  10. win10系统电脑点击桌面图标没反应怎么处理
  11. 发现同义词 python_同义词查找算法
  12. #linux# gcc编译优化-O0 -O1 -O2 -O3 -OS说明
  13. 2018版本及2017版本的IntelliJ IDEA破解步骤,非lanyu,到2099年
  14. 每日 30 秒 ⏱ 强风吹拂
  15. 计算机考研与就业的利弊分析,考研还是工作?两种选择的利弊分析,让你做出正确选择!...
  16. AES解密失败 WxMaCryptUtils.decrypt(sessionKey,encryptedData, iv)
  17. VSCode的下载安装与配置教程(详细)
  18. 7——18 day 24 35min 类属性
  19. 企业管理常用缩写术语之中英文对照表(含解释)
  20. Python爬虫 | 滑动验证码破解

热门文章

  1. C# 文件搜索过程中如何提取office文件,wps,pdf,html,eml等格式的文件正文
  2. Mysql学习日记:L13-distinct关键字
  3. python提取支付宝的账单_python爬取支付宝账单
  4. 2016.10.9晨记
  5. 思迈特软件Smartbi:公安大数据的3个发展阶段
  6. 解决QML debugging is enabled.Only use this in a safe environment.警告
  7. ajax无刷新验证用户名
  8. OpenEmu MAME核心自动更新解决
  9. leetcode(17~30)
  10. 学习phyton的基础知识