[HDU6212]Zuma

题目大意:
  祖玛游戏。
  给你一个01串,你可以往里面加一些0或1,如果连续的0或1超过3个,那么就可以消去。问消去所有的珠子至少要加几个珠子。

思路:
  区间DP。
  首先把原来的01串,改成存储连续的同种颜色的珠子有几个。
  考虑只有一种珠子时,f[i][j]=3-a[i];
  若当前区间有多种颜色的珠子,分为以下几种情况:
    1.由两个区间合并而来,f[i][j]=std::min(f[i][j],f[i][k]+f[k+1][j]);
    2.如果当前区间内有奇数个连续的同色珠子块,又分为以下2种情况:
      1).消去中间的块以后,两边的块合并:f[i][j]=std::min(f[i][j],f[i+1][j-1]+(a[i]+a[j]==2));
      2).分别消去中间两个块后,左、中、右的块合并:f[i][j]=std::min(f[i][j],f[i+1][k-1]+f[k+1][j-1])。

 1 #include<cstdio>
 2 #include<cctype>
 3 #include<algorithm>
 4 inline int getint() {
 5     register char ch;
 6     while(!isdigit(ch=getchar()));
 7     register int x=ch^‘0‘;
 8     while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^‘0‘);
 9     return x;
10 }
11 const int N=201;
12 char s[N];
13 int a[N],f[N][N];
14 int main() {
15     int T=getint();
16     for(register int t=1;t<=T;t++) {
17         scanf("%s",s);
18         a[0]=a[1]=1;
19         for(register int i=1;s[i];i++) {
20             if(s[i]==s[i-1]) {
21                 a[a[0]]++;
22             } else {
23                 a[++a[0]]=1;
24             }
25         }
26         for(register int i=1;i<=a[0];i++) {
27             a[i]=std::min(a[i],2);
28         }
29         for(register int j=1;j<=a[0];j++) {
30             for(register int i=j;i;i--) {
31                 if(i==j) {
32                     f[i][j]=3-a[i];
33                     continue;
34                 }
35                 f[i][j]=(j-i+1)<<1;
36                 for(register int k=i;k<j;k++) {
37                     f[i][j]=std::min(f[i][j],f[i][k]+f[k+1][j]);
38                 }
39                 if((j-i)&1) continue;
40                 f[i][j]=std::min(f[i][j],f[i+1][j-1]+(a[i]+a[j]==2));
41                 if(a[i]+a[j]<=3) {
42                     for(register int k=i+2;k<j-1;k++) {
43                         if(a[k]!=1) continue;
44                         f[i][j]=std::min(f[i][j],f[i+1][k-1]+f[k+1][j-1]);
45                     }
46                 }
47             }
48         }
49         printf("Case #%d: %d\n",t,f[1][a[0]]);
50     }
51     return 0;
52 }
时间: 2024-09-30 10:49:31

[HDU6212]Zuma的相关文章

Tsinghua OJ Zuma

Description Let's play the game Zuma! There are a sequence of beads on a track at the right beginning. All the beads are colored but no three adjacent ones are allowed to be with a same color. You can then insert beads one by one into the sequence. O

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

Codeforces Round #336 (Div. 2) D. Zuma

D - Zuma 题意:给你一个数字组成的串, 每次你能消去一段连续的回文串,问你最少需要操作几次把所有数字删完. 思路:区间dp, dp[ i ][ j ]表示删 i  到 j 段最少需要几次. 我们只考虑最左边的那个点的删除情况. 首先dp[ i ] [ j ] <= dp[ i + 1] [ j ] + 1 然后我们枚举 i 到 j  里面的点, 找到a[ k ] == a[ i ] 那么可以得到方程 dp[ i ] [ j ] = min (dp[ i ] [ j ] , dp[ i +

Zuma (区间DP)

Genos recently installed the game Zuma on his phone. In Zuma there exists a line of n gemstones, the i-th of which has color ci. The goal of the game is to destroy all the gemstones in the line as quickly as possible. In one second, Genos is able to

[Swift]LeetCode488. 祖玛游戏 | Zuma Game

Think about Zuma Game. You have a row of balls on the table, colored red(R), yellow(Y), blue(B), green(G), and white(W). You also have several balls in your hand. Each time, you may choose a ball in your hand, and insert it into the row (including th

Bzoj1032 [JSOI2007]祖码Zuma

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

[JSOI2007]祖码Zuma

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

Bzoj1939 [Croatian2010] Zuma

Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 43  Solved: 31 Description 有一行 N 个弹子,每一个都有一个颜色.每次可以让超过 K 个的连续的同颜色的一段 弹子消失,剩下的会重新紧凑在一起.你有无限的所有颜色的弹子,要求在这行弹子中插入 最少的弹子,使得弹子全部消失. Input The first line of input contains two integers N (1 ≤ N ≤ 100) and K (2 ≤