1032: [JSOI2007]祖码Zuma

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 1094  Solved: 569
[Submit][Status][Discuss]

Description

这是一个流行在Jsoi的游戏,名称为祖玛。精致细腻的背景,外加神秘的印加音乐衬托,彷佛置身在古老的国度里面,进行一个神秘的游戏——这就是著名的祖玛游戏。祖玛游戏的主角是一只石青蛙,石青蛙会吐出各种颜色的珠子,珠子造型美丽,并且有着神秘的色彩,环绕着石青蛙的是载着珠子的轨道,各种颜色的珠子会沿着轨道往前滑动,石青蛙必需遏止珠子们滚进去轨道终点的洞里头,如何减少珠子呢?就得要靠石青蛙吐出的珠子与轨道上的珠子相结合,颜色相同者即可以消失得分!直到轨道上的珠子通通都被清干净为止。 或许你并不了解祖玛游戏。没关系。这里我们介绍一个简单版本的祖玛游戏规则。一条通道中有一些玻璃珠,每个珠子有各自的颜色,如图1所示。玩家可以做的是选择一种颜色的珠子(注意:颜色可以任选,这与真实游戏是不同的)射入某个位置。

图1

图2中玩家选择一颗蓝色珠子,射入图示的位置,于是得到一个图3的局面。

图2

图3 当玩家射入一颗珠子后,如果射入的珠子与其他珠子组成了三颗以上连续相同颜色的珠子,这些珠子就会消失。例如,将一颗白色珠子射入图4中的位置,就会产生三颗颜色相同的白色珠子。这三颗珠子就会消失,于是得到图5的局面。

图4

图5 需要注意的一点是,图4中的三颗连续的黄色珠子不会消失,因为并没有珠子射入其中。珠子的消失还会产生连锁反应。当一串连续相同颜色的珠子消失后,如果消失位置左右的珠子颜色相同,并且长度大于2,则可以继续消失。例如,图6中,射入一颗红色珠子后,产生了三颗连续的红色珠子。当红色珠子消失后,它左右都是白色的珠子,并且一共有四颗,于是白色珠子也消失了。之后,消失位置的左右都是蓝色珠子,共有三颗,于是蓝色珠子也消失。最终得到图7的状态。注意,图7中的三颗黄色珠子不会消失,因为蓝色珠子消失的位置一边是紫色珠子,另一边是黄色珠子,颜色不同。

图6

图7 除了上述的情况,没有其他的方法可以消去珠子。现在,我们有一排珠子,需要你去消除。对于每一轮,你可以自由选择不同颜色的珠子,射入任意的位置。你的任务是射出最少的珠子,将全部珠子消去。

Input

第一行一个整数n(n ≤ 500),表示珠子的个数第二行n个整数(32位整数范围内),用空格分割,每个整数表示一种颜色的珠子。

Output

一个整数,表示最少需要射出的珠子个数。

Sample Input

9
1 1 2 2 3 3 2 1 1

Sample Output

1

这题应该少了一句话吧:

每次射入珠子之后必须要有消去

不然这两组数据基本上能HACK所有的AC代码

12

1 1 2 2 3 3 2 2 2 4 4 2

5

1 2 1 3 1

答案应该是

3

4

将相同的珠子并在一起

dp[i][j]表示消去区间[i, j]里所有的珠子至少需要射多少次(无视区间之外的珠子)

如果a[i]和a[j]的珠子颜色相同且数量之和>=3,那么dp[i][j] = dp[i+1][j-1]

若颜色相同但数量之和==2,那么dp[i][j] = dp[i+1][j-1]+1

其他情况dp[i][j] = min(dp[i][k]+dp[k+1][j])

#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
int dp[505][505], a[505], b[505];
int main(void)
{int n, i, k, j, cnt;scanf("%d", &n);for(i=1;i<=n;i++)scanf("%d", &a[i]);cnt = 0;for(i=1;i<=n;i++){if(i!=1 && a[i]==a[i-1])b[cnt]++;else{b[++cnt] = 1;a[cnt] = a[i];}}n = cnt;memset(dp, 62, sizeof(dp));for(i=1;i<=n;i++){if(b[i]>=2)dp[i][i] = 1;elsedp[i][i] = 2;}for(k=1;k<=n-1;k++){for(i=1;i+k<=n;i++){if(a[i]==a[i+k]){if(b[i]+b[i+k]>=3)dp[i][i+k] = dp[i+1][i+k-1];elsedp[i][i+k] = dp[i+1][i+k-1]+1;}for(j=i;j<=i+k-1;j++)dp[i][i+k] = min(dp[i][i+k], dp[i][j]+dp[j+1][i+k]);}}printf("%d\n", dp[1][n]);return 0;
}

bzoj 1032: [JSOI2007]祖码Zuma(区间DP)相关推荐

  1. BZOJ.1032.[JSOI2007]祖码(区间DP)

    题目链接 BZOJ 洛谷 AC代码: 区间DP,f[i][j]表示消掉i~j需要的最少珠子数. 先把相邻的相同颜色的珠子合并起来. 枚举方法一样,处理一下端点可以碰撞消除的情况就行. 当然合并会出现问 ...

  2. BZOJ 1032 JSOI 2007 祖码Zuma 区间DP

    题目大意:依照祖玛的玩法(任意选颜色),给出一段区间.问最少用多少个球可以把全部颜色块都消除. 思路:把输入数据依照连续的块处理.保存成颜色和数量.然后用这个来DP.我们知道,一个单独的块须要两个同样 ...

  3. 【BZOJ 4565】 [Haoi2016]字符合并 区间dp+状压

    考试的时候由于总是搞这道题导致爆零~~~~~(神™倒序难度.....) 考试的时候想着想着想用状压,但是觉得不行又想用区间dp,然而正解是状压着搞区间,这充分说明了一件事,状压不是只是一种dp而是一种 ...

  4. BZOJ 1030: [JSOI2007]文本生成器 [AC自动机 DP]

    1030: [JSOI2007]文本生成器 Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 3953  Solved: 1614 [Submit][St ...

  5. bzoj 1055: [HAOI2008]玩具取名(区间DP)

    1055: [HAOI2008]玩具取名 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2010  Solved: 1177 [Submit][St ...

  6. [BZOJ 4350]括号序列再战猪猪侠 题解(区间DP)

    [BZOJ 4350]括号序列再战猪猪侠 Description 括号序列与猪猪侠又大战了起来. 众所周知,括号序列是一个只有(和)组成的序列,我们称一个括号 序列S合法,当且仅当: 1.( )是一个 ...

  7. bzoj 1003物流运输 区间dp+spfa

    基本思路: 一开始确实没什么思路,因为觉得怎么着都会超时,然后看一下数据范围,呵,怎么都不会超时. 思路: 1.看到能改变线路,想到可以用以下区间dp,区间dp的话,先枚举长度,枚举开始位置,然后枚举 ...

  8. bzoj 1710: [Usaco2007 Open]Cheappal 廉价回文【区间dp】

    只要发现添加一个字符和删除一个字符是等价的,就是挺裸的区间dp了 因为在当前位置加上一个字符x就相当于在他的对称位置删掉字符x,所以只要考虑删除即可,删除费用是添加和删除取min 设f[i][j]为从 ...

  9. bzoj 1260: [CQOI2007]涂色paint(区间DP)

    1260: [CQOI2007]涂色paint Time Limit: 30 Sec  Memory Limit: 64 MB Submit: 1681  Solved: 1018 [Submit][ ...

最新文章

  1. java 写入mysql blob_java 读取写入 mysql blob
  2. FPGA之道(71)提高设计的综合性能(三)提高设计的重用性与易改性
  3. python百度百科怎么读-python英文怎么读
  4. nacos oaut服务地址_用户认证的例子:Spring Security oAuth2 + Spring Cloud Gateway + Nacos + Dubbo...
  5. python2和python3的一些区别
  6. Web框架——Flask系列之Flask-SQLAlchemy安装与使用 定义数据模型(八)
  7. 中本聪愿景大会(SVC):BCH最贴近中本聪白皮书
  8. String被设计成不可变和不能被继承的原因
  9. 洛谷 P3952时间复杂度 (本地AC测评RE的伪题解)
  10. 跟我学spring3 电子书下载(完)
  11. 我的Android进阶之旅------Android图片处理(Matrix,ColorMatrix)
  12. SqlParameter类——带参数的SQL语句
  13. layUI:垂直导航栏点击某个导航时关闭其他已开启导航
  14. 个人简历html模板
  15. 使用Visual Studio编译Geos
  16. 坚持定投3年,我赚了多少钱?
  17. CC2652RB硬件I2C读取FXOS8700CQ加速度传感器
  18. 论文阅读报告:Taxonomy-aware feature engineering for microbiome classification,Mai Oudah and Andreas Hen
  19. 不用加减乘除做四则运算
  20. 推荐几款电脑测试软件

热门文章

  1. python自学-分享一位小伙伴的python自学之路,走了哪些弯路?
  2. 普通人学python有意义吗-普通人为什么要学习Python?
  3. 自学python考哪些证书-学Python能挣多少钱?哪些人适合学Python?
  4. python爬虫怎么挣钱-个人利用Python爬虫技术怎么挣钱
  5. python和java哪个好-Python和Java发展前景哪个好?Python开发学习
  6. python入门先学什么-C和Python我该先学什么?
  7. JavaScript-包装类型
  8. Vue动态权限路由addRoutes执行初次白屏解决方法。
  9. 【java笔记】方法引用介绍和使用
  10. 最简单的基于FFMPEG的音频编码器(PCM编码为AAC)