有n个带有颜色的方块,没消除一段长度为x的连续的相同颜色的方块可以得到x^2的分数,让你用一种最优的顺序消除所有方块使得得分最多。

输入格式 第一行包含测试的次数t(1≤t≤15) 每个案例包含两行。第一行包含整数n(1≤n≤200),即框数。第二行包含n个数,代表每个盒子的颜色。数字的大小1~n内。

Solution

n比较小,所以我们要用n^3的dp。

我们设dp[i][j][k]表示从i缩到j,j要和j后面的k个格子缩到一起能获得的最大分数。

转移的话枚举断点,如果有一个点和j相等,就把k向前传递,否侧向后传递。

Code

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int x,dp[][][],a[],b[],n,tot,t,p;
int dfs(int i,int j,int s){
if(dp[i][j][s])return dp[i][j][s];
if(i>j)return ;
if(i==j)return dp[i][j][s]=(b[j]+s)*(b[j]+s);
for(int k=i;k<j;++k)
if(a[k]==a[j])
dp[i][j][s]=max(dp[i][j][s],dfs(i,k,s+b[j])+dfs(k+,j-,));
else dp[i][j][s]=max(dp[i][j][s],dfs(i,k,)+dfs(k+,j,s));
return dp[i][j][s];
}
int main(){
cin>>t;
while(t--){
p++;
cin>>n;a[]=-;tot=;
memset(dp,,sizeof(dp));
for(int i=;i<=n;++i){
scanf("%d",&x);
if(x==a[tot])b[tot]++;
else a[++tot]=x,b[tot]=;
}
cout<<"Case "<<p<<": "<<dfs(,tot,)<<endl;
}
return ;
}

UVA10559 Blocks(区间dp)的更多相关文章

  1. $UVA10559\ Blocks\ $区间$dp$

    \(Des\) • 有一排数量为N的方块,每次可以把连续的相同颜色的区间消除,得到分数为 区间长度的平方,然后左右两边连在一起,问最大分数为多少. • n<=1 \(Sol\) 正解状态设得奇奇 ...

  2. UVA10559&POJ1390 Blocks 区间DP

    题目传送门:http://poj.org/problem?id=1390 题意:给出一个长为$N$的串,可以每次消除颜色相同的一段并获得其长度平方的分数,求最大分数.数据组数$\leq 15$,$N ...

  3. 【POJ-1390】Blocks 区间DP

    Blocks Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 5252   Accepted: 2165 Descriptio ...

  4. POJ 1390 Blocks(区间DP)

    Blocks [题目链接]Blocks [题目类型]区间DP &题意: 给定n个不同颜色的盒子,连续的相同颜色的k个盒子可以拿走,权值为k*k,求把所有盒子拿完的最大权值 &题解: 这 ...

  5. UVA 10559 Blocks——区间dp

    题目:https://www.luogu.org/problemnew/show/UVA10559 应该想到区间dp.但怎么设计状态? 因为连续的东西有分值,所以应该记录一下连续的有多少个. 只要记录 ...

  6. UVA 10559 Blocks —— 区间DP

    题目:https://www.luogu.org/problemnew/show/UVA10559 区间DP,有点难想: 为了方便,先把原来就是连续一段相同颜色的点看做一个点,记一下长度: f[i][ ...

  7. 『Blocks 区间dp』

    Blocks Description Some of you may have played a game called 'Blocks'. There are n blocks in a row, ...

  8. POJ1390 Blocks (区间DP)

    题目链接:POJ 1390.Blocks 题意: 有n个方块排成一列,每个方块有颜色即1到n的一个值,每次操作可以把一段相同颜色的方块拿走,长度为k,则获得的分数为 \(k\times k\),求可获 ...

  9. POJ 1390 Blocks (区间DP) 题解

    题意 t组数据,每组数据有n个方块,给出它们的颜色,每次消去的得分为相同颜色块个数的平方(要求连续),求最大得分. 首先看到这题我们发现我们要把大块尽可能放在一起才会有最大收益,我们要将相同颜色块合在 ...

随机推荐

  1. vue动态class——实现tag的选中状态

    vue动态class——实现tag的选中状态 <template> <div class="common-nav"> <div class=" ...

  2. Windows10下安装VMware虚拟机并搭建CentOS系统环境

    转载: http://blog.51cto.com/10085711/2069270 操作系统 Windows 10专业版(64位) VMware虚拟机 产品:VMware® Workstation ...

  3. MySQL索引的设计、使用和优化

    原文:http://bbs.landingbj.com/t-0-243071-1.html MySQL索引概述 所有MySQL列类型可以被索引.对相关列使用索引是提高SELECT操作性能的最佳途径.根 ...

  4. 【Python3练习题 005】输入三个整数x,y,z,请把这三个数由小到大输出

    import re x, y, z = re.split(',| |,| ', input('请输入3个数字,用逗号或空格隔开:'))x, y, z = int(x), int(y), int(z) ...

  5. 便捷的ajax请求

    为什么要做这个呢?如果后端给的数据不单有JSON字符串,还有对象呢?这个时候我们就要每个都处理(JSON.parse).万一后端又改了,所有都是对象呢?如此一来我们就需要对我们的ajax进行封装. 这 ...

  6. yolo buffer is too small for requested array

    yolo.cfg 与 yolo.weights 版本一定要对应, darknet链接 https://github.com/pjreddie/darknet 下载后在cfg文件夹下找到yolov2的配 ...

  7. Java Map 集合实现类

    Map 用于保存具有映射关系的数据,集合里会保存两组值,一组用于保存Map里的key,一组用于保存Map里的value,key与map可以是任何引用类型数据.Map的key不允许重复.key与valu ...

  8. [转帖]国产闪存颗粒终于熬出头 紫光存储S100固态硬盘评测

    国产闪存颗粒终于熬出头 紫光存储S100固态硬盘评测 https://www.cnbeta.com/articles/tech/830875.htm 全国产的 SSD 群联貌似是对岸的 不过不管怎么说 ...

  9. Numpy中array数据操作

    1.创建: import numpy as np arr=np.array([1,2,3]) print(arr,arr.ndim) list=[1,2,3] arr=np.array(list) 2 ...

  10. python爬虫之requests的基本使用

    简介 Requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库,Requests它会比urllib更加方便,可以节约我们大量的工作. 一 ...