题目大意:依照祖玛的玩法(任意选颜色),给出一段区间。问最少用多少个球可以把全部颜色块都消除。

思路:把输入数据依照连续的块处理。保存成颜色和数量。然后用这个来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;
}

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

  1. [BZOJ 1032][JSOI 2007]祖玛 题解(区间DP)

    [BZOJ 1032][JSOI 2007]祖玛 Description https://www.lydsy.com/JudgeOnline/problem.php?id=1032 Solution ...

  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

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

  4. BZOJ 1032 [JSOI2007]祖码Zuma

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

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

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

  6. bzoj1032 [JSOI2007]祖码Zuma

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

  7. [JSOI2007]祖码Zuma

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

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

    链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1044 Description 有n根木棍, 第i根木棍的长度为Li,n根木棍依次连结了一起, ...

  9. CF607B Zuma(区间dp)

    题意 题目链接 Sol 裸的区间dp,转移的时候判一下两个字符是否相等即可 #include<bits/stdc++.h> #define Pair pair<int, int> ...

随机推荐

  1. 大型网站的 HTTPS 实践(二)——HTTPS 对性能的影响(转)

    原文链接:http://op.baidu.com/2015/04/https-s01a02/ 1 前言 HTTPS 在保护用户隐私,防止流量劫持方面发挥着非常关键的作用,但与此同时,HTTPS 也会降 ...

  2. C# 获取计算机cpu,硬盘,内存相关的信息

    using System;using System.Management; namespace MmPS.Common.Helper{ /// <summary> /// 获取计算机相关的 ...

  3. “您查看的网页正在试图关闭窗口。是否关闭此窗口”的屏蔽方法(JavaScript)

    原文:http://www.cnblogs.com/tigerhuolh/archive/2011/04/14/2015634.html 用JS代码关闭窗口时会提示“您查看的网页正在试图关闭窗口.是否 ...

  4. bug-bug-bug

    #-*-coding:utf-8-*- import urllib import urllib2 import re import json import threading import reque ...

  5. gtk+学习笔记(二)

    如何创建一个按钮呢,直接贴代码把,有详细的注释. #include<gtk/gtk.h> gint data_count=; void on_button_clicked (GtkWidg ...

  6. php正则匹配以“abc”开头且不能以“xyz”结尾的字符串

    本文介绍下,用php正则区配以"abc"开头的,且不能以"xyz"结尾的字符串的方法,有需要的朋友参考下. 要求:用php正则表达式匹配以“abc”开头,但结尾 ...

  7. android 代码设置、打开wifi热点及热点的连接(转)

      用过快牙的朋友应该知道它们在两天设备之间传输文件的时候使用的是wifi热点,然后另一台便连接这个热点再进行传输.快牙传输速度惊人应该跟它的这种机制有关系吧.不知道它的搜索机制是怎样的,但我想应该可 ...

  8. Linux文件访问和日志

    一.文件系统创建一个文件的过程假设我们想要新增一个文件,此时文件系统的行为是:先确定用户对于欲新增文件的目录是否具有 w 与 x 的权限,若有的话才能新增:根据 inode bitmap 找到没有使用 ...

  9. [实战]MVC5+EF6+MySql企业网盘实战(10)——新建文件夹

    写在前面 上篇文章更新了编辑了文件名的操作,本片文章将实现新建文件夹的功能. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MySql企业网盘实战 ...

  10. css3实现立方体,并且自转效果

    先是HTML 一个父div包含四个绝对定位的div <div class='container container--realistic'> <div class='cube cub ...