1032: [JSOI2007]祖码Zuma

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 672  Solved: 335
[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

HINT

据说此题标程有误,致使数据全错....

Source

题意:不说

分析:首先连续的一样的珠子显然可以合并,然后就是显然的区间dp

Dp[i][j] = min(Dp[i][k]+Dp[k+1][j]);

如果两端颜色相同,显然我们可以让中间先消去然后再让它们自然合并

这是题解的做法,但显然是错误的,他忽略了数个珠子不连续合并的情况

比如3个珠子分开

1 2 1 3 1

显然前两个1如果并在一起可以先不插入一个珠子使它们消失,等待第二个2消除光后再与第三个1合并

至于正确的解法,网上有人提出了一个解法,但我认为是错误的,因为那个解法有很多情况没有考虑到,比如4个1分开的情况。。。

真正正确的解法我还未想出

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <cstdlib>
  4. #include <cmath>
  5. #include <deque>
  6. #include <vector>
  7. #include <queue>
  8. #include <iostream>
  9. #include <algorithm>
  10. #include <map>
  11. #include <set>
  12. #include <ctime>
  13. using namespace std;
  14. typedef long long LL;
  15. typedef double DB;
  16. #define For(i, s, t) for(int i = (s); i <= (t); i++)
  17. #define Ford(i, s, t) for(int i = (s); i >= (t); i--)
  18. #define Rep(i, t) for(int i = (0); i < (t); i++)
  19. #define Repn(i, t) for(int i = ((t)-1); i >= (0); i--)
  20. #define rep(i, x, t) for(int i = (x); i < (t); i++)
  21. #define MIT (2147483647)
  22. #define INF (1000000001)
  23. #define MLL (1000000000000000001LL)
  24. #define sz(x) ((int) (x).size())
  25. #define clr(x, y) memset(x, y, sizeof(x))
  26. #define puf push_front
  27. #define pub push_back
  28. #define pof pop_front
  29. #define pob pop_back
  30. #define ft first
  31. #define sd second
  32. #define mk make_pair
  33. inline void SetIO(string Name) {
  34. string Input = Name+".in",
  35. Output = Name+".out";
  36. freopen(Input.c_str(), "r", stdin),
  37. freopen(Output.c_str(), "w", stdout);
  38. }
  39.  
  40. const int N = ;
  41. int m, Arr[N], n, Color[N], Num[N];
  42. int Dp[N][N];
  43. bool Visit[N][N];
  44.  
  45. inline void Input() {
  46. scanf("%d", &m);
  47. For(i, , m) scanf("%d", Arr+i);
  48. }
  49.  
  50. inline int Search(int L, int R) {
  51. if(Visit[L][R]) return Dp[L][R];
  52. Visit[L][R] = ;
  53. if(L == R) return Dp[L][R] = max(-Num[L], );
  54. if(L > R) return Dp[L][R] = INF;
  55.  
  56. int Ret = INF, tmp;
  57. For(i, L, R-) {
  58. tmp = Search(L, i)+Search(i+, R);
  59. Ret = min(Ret, tmp);
  60. }
  61. if(Color[L] == Color[R]) {
  62. tmp = max(-Num[L]-Num[R], )+Search(L+, R-);
  63. Ret = min(Ret, tmp);
  64. }
  65. return Dp[L][R] = Ret;
  66. }
  67.  
  68. inline void Solve() {
  69. Arr[] = -;
  70. For(i, , m) {
  71. if(Arr[i] != Arr[i-]) Color[++n] = Arr[i];
  72. Num[n]++;
  73. }
  74.  
  75. int Ans = Search(, n);
  76. printf("%d\n", Ans);
  77. }
  78.  
  79. int main() {
  80. #ifndef ONLINE_JUDGE
  81. SetIO("");
  82. #endif
  83. Input();
  84. Solve();
  85. return ;
  86. }

bzoj1032 [JSOI2007]祖码Zuma的更多相关文章

  1. bzoj千题计划120:bzoj1032[JSOI2007]祖码Zuma

    http://www.lydsy.com/JudgeOnline/problem.php?id=1032 https://www.luogu.org/discuss/show?postid=8416 ...

  2. [BZOJ1032][JSOI2007]祖码Zuma 区间dp

    1032: [JSOI2007]祖码Zuma Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1105  Solved: 576 [Submit][S ...

  3. BZOJ 1032 [JSOI2007]祖码Zuma

    1032: [JSOI2007]祖码Zuma Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 637  Solved: 318[Submit][Stat ...

  4. 1032: [JSOI2007]祖码Zuma

    链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1032 Description 这是一个流行在Jsoi的游戏,名称为祖玛.精致细腻的背景,外加神 ...

  5. BZOJ 1032 JSOI2007 祖码Zuma 动态规划

    题目大意:给定一个祖玛序列,任选颜色射♂出珠子,问最少射♂出多少珠子 输入法近期越来越奇怪了0.0 首先我们把连续同样的珠子都缩在一起 令f[i][j]表示从i開始的j个珠子的最小消除次数 初值 f[ ...

  6. [JSOI2007]祖码Zuma

    题目描述 这是一个流行在Jsoi的游戏,名称为祖玛. 精致细腻的背景,外加神秘的印加音乐衬托,彷佛置身在古老的国度里面,进行一个神秘的游戏——这就是著名的祖玛游戏.祖玛游戏的主角是一只石青蛙,石青蛙会 ...

  7. 【BZOJ 1032】 [JSOI2007]祖码Zuma

    [题目链接]:http://www.lydsy.com/JudgeOnline/problem.php?id=1032 [题意] [题解] /* 设f[i][j]表示从第i个珠子开始的j个珠子被消除; ...

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

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

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

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

随机推荐

  1. 直接拿来用!超实用的Java数组技巧攻略

    java编程语言经验分享 摘要:本文分享了关于Java数组最顶级的11大方法,帮助你解决工作流程问题,无论是运用在团队环境或是在私人项目中,你都可以直接拿来用. 本文分享了关于Java数组最顶级的11 ...

  2. [Effective JavaScript 笔记] 第1章:让自己习惯javascript小结

    在这里整理一下,每条对应的提示 第1条:了解使用的js版本 确定应用程序支持的js的版本(浏览器也是应用程序噢) 确保使用的js特性是应用程序支持的(要不写了也运行不了) 总是在严格模式下编写和测试代 ...

  3. poj2485 Highways

    Description The island nation of Flatopia is perfectly flat. Unfortunately, Flatopia has no public h ...

  4. Jquery获取数据并生成下拉菜单

    <script type="text/javascript"> $(document).ready(function() { GetByJquery(); $(&quo ...

  5. C++多态公有继承

    面向对象的三个基本特征 面向对象的三个基本特征是:封装.继承.多态.其中,封装可以隐藏实现细节,使得代码模块化:继承可以扩展已存在的代码模块(类):它们的目的都是为了——代码重用.而多态则是为了实现另 ...

  6. 29.调整数组顺序使奇数位于偶数前面[ReOrderArray]

    [题目] 输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分.要求时间复杂度为O(n). [分析] 如果不考虑时间复杂度,最简单的思路应该是从头扫描这个 ...

  7. iOS 的UIWindow 类研究

    今日发现如果想做出漂亮的界面效果,就需要仔细研究一下UIWindow这个类.现在还不清楚为什么要有这么一个UIWindow类,它跟UIView的根本区别是什么?和Android中的什么类比较相像.先做 ...

  8. HDU 3833 YY's new problem ()

    YY's new problem Time Limit: 12000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others ...

  9. [Java] Java 打包成jar包 和 解压jar包

    解压jar包 jar xf xxx.jar 打包成jar包 方法一:通过jar命令 jar命令的用法: 下面是jar命令的帮助说明: 用法:jar {ctxui}[vfm0Me] [jar-file] ...

  10. [MAC ] Mac-OSX下安装Git

    转载自 : http://www.cnblogs.com/shanyou/archive/2011/01/30/1948088.html Mac-OSX下安装Git是一件很简单的事,我们可以下载一个安 ...