题目:https://www.luogu.org/problemnew/show/UVA10559

区间DP,有点难想;

为了方便,先把原来就是连续一段相同颜色的点看做一个点,记一下长度;

f[i][j][k] 表示右边有 k 个和 j 颜色相同的点时(其它都已经各自被消掉),消除 i ~ j 区间的答案;

从消除 j 点来考虑,有两种方法:1.和右边那 k 个点合并消除,所以 f[i][j][k] = f[i][j-1][0] + ( len[j] + k )2

2.和右边以及区间中的某个相同颜色的点一起合并消除,所以 f[i][j][k] = max{ f[i][p][k+len[j]] + f[p+1][j-1][0] } ,col[p] = col[j]

虽然只考虑了右边,但左边会在之后算左边的区间时被算上,所以可以覆盖所有情况;

(不太会赋的)初值是 f[i][i][0] = len[i]2 ,f[i][i-1][0]=0 (进入 i,i,k 时会被枚举到 );

其实不太会DP的顺序,写了个长度从小到大的却错了(大概是初值不一样吧,但是不太会),干脆变成记忆化搜索。

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int const maxn=;
int T,n,a[maxn],col[maxn],len[maxn],f[maxn][maxn][maxn],s[maxn],lst[maxn];
int sqr(int x){return x*x;}
int dp(int l,int r,int k)
{
if(f[l][r][k]!=-)return f[l][r][k];
f[l][r][k]=dp(l,r-,)+sqr(len[r]+k);
for(int p=l;p<r;p++)
if(col[p]==col[r])
f[l][r][k]=max(f[l][r][k],dp(l,p,k+len[r])+dp(p+,r-,));
return f[l][r][k];
}
int main()
{
scanf("%d",&T); int tt=;
while(T--)
{
tt++;
// memset(lst,0,sizeof lst);
memset(len,,sizeof len);
memset(f,-,sizeof f);
scanf("%d",&n);
for(int i=;i<=n;i++)scanf("%d",&a[i]);
int cnt=;
for(int i=,nw;i<=n;i=nw+)
{
nw=i; col[++cnt]=a[nw]; len[cnt]=;//
while(a[nw]==a[nw+])nw++,len[cnt]++;
}
// for(int i=n;i;i--)
// {
// s[i]=lst[col[i]]+1;
// lst[col[i]]++;
// }
n=cnt;
for(int i=;i<=n;i++)f[i][i][]=sqr(len[i]),f[i][i-][]=;//!
// for(int l=2;l<=n;l++)
// for(int i=1;i<=n;i++)
// {
// int j=i+l;
// for(int k=0;k<=s[j]-1;k++)
// {
// f[i][j][k]=f[i][j-1][0]+sqr(len[j]+k);
// for(int p=i;p<j;p++)//<
// if(col[p]==col[j])
// f[i][j][k]=max(f[i][j][k],f[i][p][k+len[j]]+f[p+1][j-1][0]);//k+1
// }
// }
printf("Case %d: %d\n",tt,dp(,n,));
}
return ;
}

UVA 10559 Blocks —— 区间DP的更多相关文章

  1. UVA 10559 Blocks——区间dp

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

  2. UVA 10559 Blocks(区间DP&&递推)

    题目大意:给你玩一个一维版的消灭星星,得分是当前消去的区间的长度的平方,求最大得分. 现在分析一下题目 因为得分是长度的平方,不能直接累加,所以在计算得分时需要考虑前一个状态所消去的长度,仅用dp[l ...

  3. UVA 10559 Blocks

    题目大意:有一串带颜色的方块,每次可以消掉颜色相同的一段,得到size^2的分数,问最多能得到多少分数.n≤200. 给这题状态跪下来. 显然的区间DP,但设f[i][j]是不够的. 考虑到之前做过的 ...

  4. 【POJ-1390】Blocks 区间DP

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

  5. POJ 1390 Blocks(区间DP)

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

  6. UVA10559&POJ1390 Blocks 区间DP

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

  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. hdu 4597 + uva 10891(一类区间dp)

    题目链接:http://vjudge.net/problem/viewProblem.action?id=19461 思路:一类经典的博弈类区间dp,我们令dp[l][r]表示玩家A从区间[l, r] ...

随机推荐

  1. awk输出指定列

    awk '{print $0} file' #打印所有列awk '{print $1}' file #打印第一列 awk '{print $1, $3}' file #打印第一和第三列 cat fil ...

  2. Xshell连接Centos7.5和yum

    目 录 第1章 Centos7 IP地址的配置    1 1.1 第一种配置ip方法(nmtui)    1 1.2 第二种 修改网卡配置文件    5 1.2.1 使用cat查看配置文件    5 ...

  3. hdu4428(Coder)线段树

    Coder Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  4. hadoop_exporter

    1.下载安装go 1.下载二进制包:go1.4.linux-amd64.tar.gz. 2.将下载的二进制包解压至 /usr/local目录. tar -C /usr/local -xzf go1.4 ...

  5. 百度富文本编辑器UEditor自定义上传图片接口

    如下图:  然后修改ueditor.all.js   

  6. java实现扫二维码登录功能

    哈哈哈 http://blog.sina.com.cn/s/blog_7f416edf0102vb8h.html http://blog.sina.com.cn/s/blog_7f416edf0102 ...

  7. 九度oj 题目1056:最大公约数

    题目1056:最大公约数 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:8068 解决:5317 题目描述: 输入两个正整数,求其最大公约数. 输入: 测试数据有多组,每组输入两个正整数. ...

  8. 命令行下设置 PYTHONPATH 来正确运行Python代码

    写Python程序,总要使用一些自己使用的库:在运行此类程序的时候,就需要先配置好 PYTHONPATH 环境变量:否则会导致找不到库错误. Windows下,可以写一个bat来简化配置: @ECHO ...

  9. 【NOIP2017练习】怎样打好隔膜(贪心,堆,带删除priority_queue)

    题意:OI大师抖儿在夺得银牌之后,顺利保送pku.这一天,抖儿问长者:“我的手速虽然已经站在了人类的巅峰,但是打隔膜还是输.我换了很多队友,但是没有用.请问应该怎样打好隔膜?”长者回答:“你啊,Too ...

  10. P1614 爱与愁的心痛

    洛谷——P1614 爱与愁的心痛 题目背景 (本道题目隐藏了两首歌名,找找看哪~~~) <爱与愁的故事第一弹·heartache>第一章 <我为歌狂>当中伍思凯神曲<舞月 ...