BZOJ 1032 JSOI 2007 祖码Zuma 区间DP

题目大意:按照祖玛的玩法(随意选颜色),给出一段区间,问最少用多少个球能够把所有颜色块都消除。

思路:把输入数据按照连续的块处理,保存成颜色和数量,然后用这个来DP。我们知道,一个单独的块需要两个相同的颜色可以消去,对于这样的块f[i][i] = 2,其余的>=2个的块只需要一个,这样的块f[i][i] = 1。转移就比较简单了,按照区间DP的一般思想,最外层循环的是区间长度,中间循环的是起始位置,最后循环的是松弛变量。特殊情况是这个区间的两边是同一种颜色,多加一个转移方程。

CODE:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define MAX 510
using namespace std;

pair<int,int> arr[MAX];

int cnt,src[MAX],total;
int f[MAX][MAX];

int main()
{
	cin >> cnt;
	for(int i = 1; i <= cnt; ++i)
		scanf("%d",&src[i]);
	int last = src[1],num = 0;
	for(int i = 1; i <= cnt; ++i) {
		if(src[i] != last) {
			arr[++total] = make_pair(last,num);
			last = src[i];
			num = 1;
		}
		else	++num;
	}
	arr[++total] = make_pair(last,num);
	memset(f,0x3f,sizeof(f));
	for(int i = 1; i <= total; ++i)
		if(arr[i].second == 1)
			f[i][i] = 2;
		else	f[i][i] = 1;
	for(int k = 2; k <= total; ++k)
		for(int i = 1; i + k - 1 <= total; ++i)
		{
			if(arr[i].first == arr[i + k - 1].first)
				f[i][i + k - 1] = f[i + 1][i + k - 2] + (arr[i].second + arr[i + k - 1].second == 2 ? 1:0);
			for(int j = 1; j < k; ++j)
				f[i][i + k - 1] = min(f[i][i + k - 1],f[i][i + j - 1] + f[i + j][i + k - 1]);
		}
	cout << f[1][total] << endl;
	return 0;
}

时间: 2024-10-15 11:12:43

BZOJ 1032 JSOI 2007 祖码Zuma 区间DP的相关文章

BZOJ 1030 JSOI 2007 文本生成器 AC自动机+DP

题目大意:给出一些字符串.已知如果文章里出现过这些字符串中的一个,那么就说这个文章是可读的.问长度为l的文章有多少是可读的文章. 思路:直接处理不太好弄, 我们可以统计出来不可读的文章,然后用26^l减去就是可读的文章总数. 将所有的字串建Trie图,然后设f[i][j]为文章的第i个字符Trie图中的第j个节点的时候不可读的文章的数量.转移就很简单了.注意一下取模就行了. CODE: #include <queue> #include <cstdio> #include <

BZOJ 1032 [JSOI2007]祖码Zuma

1032: [JSOI2007]祖码Zuma Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 637  Solved: 318[Submit][Status][Discuss] Description 这是一个流行在Jsoi的游戏,名称为祖玛.精致细腻的背景,外加神秘的印加音乐衬托,彷佛置身在古老的国度里面,进行一个神秘的游戏——这就是著名的祖玛游戏.祖玛游戏的主角是一只石青蛙,石青蛙会吐出各种颜色的珠子,珠子造型美丽,并且有着神秘的色彩,环绕着石

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

http://www.lydsy.com/JudgeOnline/problem.php?id=1032 https://www.luogu.org/discuss/show?postid=8416 #include<cstdio> #include<cstring> #include<iostream> using namespace std; #define N 501 int a[N]; int col[N],num[N]; int f[N][N]; void r

[Wikioi 2913][BZOJ 1029][JSOI 2007]建筑抢修

题目描述 Description 小刚在玩JSOI提供的一个称之为"建筑抢修"的电脑游戏: 经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者.但是T部落的基地里已经有N个建筑设施受到了严重的损伤,如果不尽快修复的话,这些建筑设施将会完全毁坏.现在的情况是:T部落基地里只有一个修理工人,虽然他能瞬间到达任何一个建筑,但是修复每个建筑都需要一定的时间.同时,修理工人修理完一个建筑才能修理下一个建筑,不能同时修理多个建筑.如果某个建筑在一段时间之内没有完全修理完毕,这个建筑就报废了.你的

Bzoj1032 [JSOI2007]祖码Zuma

Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1003  Solved: 512 Description 这是一个流行在Jsoi的游戏,名称为祖玛.精致细腻的背景,外加神秘的印加音乐衬托,彷佛置身在古老的国度里面,进行一个神秘的游戏——这就是著名的祖玛游戏.祖玛游戏的主角是一只石青蛙,石青蛙会吐出各种颜色的珠子,珠子造型美丽,并且有着神秘的色彩,环绕着石青蛙的是载着珠子的轨道,各种颜色的珠子会沿着轨道往前滑动,石青蛙必需遏止珠子们滚进去轨道终点的

[JSOI2007]祖码Zuma

题目描述 这是一个流行在Jsoi的游戏,名称为祖玛. 精致细腻的背景,外加神秘的印加音乐衬托,彷佛置身在古老的国度里面,进行一个神秘的游戏--这就是著名的祖玛游戏.祖玛游戏的主角是一只石青蛙,石青蛙会吐出各种颜色的珠子,珠子造型美丽,并且有着神秘的色彩,环绕着石青蛙的是载着珠子的轨道,各种颜色的珠子会沿着轨道往前滑动,石青蛙必需遏止珠子们滚进去轨道终点的洞里头,如何减少珠子呢?就得要靠石青蛙吐出的珠子与轨道上的珠子相结合,颜色相同者即可以消失得分!直到轨道上的珠子通通都被清干净为止. 或许你并不

BZOJ 1260: [CQOI2007]涂色paint【区间DP】

Description 假设你有一条长度为5的木版,初始时没有涂过任何颜色.你希望把它的5个单位长度分别涂上红.绿.蓝.绿.红色,用一个长度为5的字符串表示这个目标:RGBGR. 每次你可以把一段连续的木版涂成一个给定的颜色,后涂的颜色覆盖先涂的颜色.例如第一次把木版涂成RRRRR,第二次涂成RGGGR,第三次涂成RGBGR,达到目标. 用尽量少的涂色次数达到目标. Input 输入仅一行,包含一个长度为n的字符串,即涂色目标.字符串中的每个字符都是一个大写字母,不同的字母代表不同颜色,相同的字

【BZOJ】1044: [HAOI2008]木棍分割 二分+区间DP

链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1044 Description 有n根木棍, 第i根木棍的长度为Li,n根木棍依次连结了一起, 总共有n-1个连接处. 现在允许你最多砍断m个连接处, 砍完后n根木棍被分成了很多段,要求满足总长度最大的一段长度最小, 并且输出有多少种砍的方法使得总长度最大的一段长度最小. 并将结果mod 10007... Input 输入文件第一行有2个数n,m. 接下来n行每行一个正整数Li,表示第i根木棍

[BZOJ 1032][JSOI2007]祖码Zuma(区间Dp)

Description 这是一个流行在Jsoi的游戏,名称为祖玛.精致细腻的背景,外加神秘的印加音乐衬托,彷佛置身在古老的国度里面,进行一个神秘的游戏——这就是著名的祖玛游戏.祖玛游戏的主角是一只石青蛙,石青蛙会吐出各种颜色的珠子,珠子造型美丽,并且有着神秘的色彩,环绕着石青蛙的是载着珠子的轨道,各种颜色的珠子会沿着轨道往前滑动,石青蛙必需遏止珠子们滚进去轨道终点的洞里头,如何减少珠子呢?就得要靠石青蛙吐出的珠子与轨道上的珠子相结合,颜色相同者即可以消失得分!直到轨道上的珠子通通都被清干净为止.