/*
区间dp,为什么要升维?
因为若用dp[l][r]表示消去dp[l][r]的最大的分,那么显然状态转移方程dp[l][r]=max{dp[l+1][k-1]+(len[l]+len[k])^2+len[k+1][r]}
可是这样是直接消去l和k两个快的,有一种情况是在k.r两个块之间还有个同色块,那么这种情况就考虑不到了
所以我们要考虑是否能先不直接消去l,k合并的块,而是将其保留下来,之后枚举到k,r区域的块时再一同合并进行考虑
所以再加一维来记录l,k合并后的信息 为了方便,再加一维来表示r后面的同色块情况 dp[l][r][q]表示区间消去区间[l,r]并且区间右侧有长度为q的和块r颜色相同的块,所得到的分数
此时有两种情况
1:r和len合并,直接消去
dp[l][r][q]=dp[l][r-1][0]+(len[r]+q)^2;
2: r和len合并,并且和[l,r-1]中的k块合并
dp[l][r][q]=max{dp[l][k][len[j]+q]+dp[k+1][r-1][0]}
两种情况取最大值即可
初始化状态dp[i][i]=1,目标状态dp[1][m][0]
*/
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
#define maxn 220
int n,m,a[maxn],color[maxn],len[maxn],dp[maxn][maxn][maxn]; int dfs(int l,int r,int q){
if(dp[l][r][q]!=-)return dp[l][r][q];
if(l==r) return dp[l][r][q]=(len[r]+q)*(len[r]+q);
int Max=(len[r]+q)*(len[r]+q);
Max+=dfs(l,r-,);//第一种情况
for(int k=l;k<r;k++)
if(color[k]==color[r]) Max=max(Max,dfs(l,k,q+len[r])+dfs(k+,r-,));
//printf("%d %d %d %d\n",l,r,q,Max);
return dp[l][r][q]=Max;
}
int main(){
int t;
cin>>t;
for(int tt=;tt<=t;tt++){
printf("Case %d: ",tt); cin>>n;
for(int i=;i<=n;i++)cin>>a[i];
int last=a[];
m=,color[]=a[],len[]=;
for(int i=;i<=n;i++){//把颜色小块合并成大块
if(a[i]==last)len[m]++;
else {
last=a[i];color[++m]=a[i];len[m]=;
}
} memset(dp,-,sizeof dp);
dfs(,m,);
printf("%d\n",dp[][m][]);
}
}

cf的题

/*
dp[l][r][q]表示消去区间[l,r]+q的最大值
*/
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define maxn 200
ll n,dp[maxn][maxn][maxn],c[maxn],len[maxn];
char s[maxn];
ll dfs(int l,int r,int q){
if(l>r)return ;
if(l==r)return len[+q];
if(~dp[l][r][q])return dp[l][r][q]; ll Max=dfs(l,r-,)+len[+q];
for(int k=l;k<r;k++)
if(s[r]==s[k])Max=max(Max,dfs(l,k,q+)+dfs(k+,r-,));
//printf("%d %d %d %d\n",l,r,q,Max);
return dp[l][r][q]=Max;
}
int main(){
cin>>n;
scanf("%s",s);
for(int i=;i<=n;i++)cin>>len[i];
memset(dp,-,sizeof dp);
printf("%lld\n",dfs(,n-,));
}

cf1107e uva10559区间dp升维的更多相关文章

  1. UVA 10559 Blocks —— 区间DP

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

  2. 【Uva10559】Blocks(区间DP)

    Description 题意:有一排数量为N的方块,每次可以把连续的相同颜色的区间消除,得到分数为区间长度的平方,然后左右两边连在一起,问最大分数为多少. \(1\leq N\leq200\) Sol ...

  3. BZOJ 2101 [Usaco2010 Dec]Treasure Chest 藏宝箱:区间dp 博弈【两种表示方法】【压维】

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2101 题意: 共有n枚金币,第i枚金币的价值是w[i]. 把金币排成一条直线,Bessie ...

  4. [CF1107E]Vasya and Binary String【区间DP】

    题目描述 Vasya has a string s of length n consisting only of digits 0 and 1. Also he has an array a of l ...

  5. UVA10559&POJ1390 Blocks 区间DP

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

  6. UVA10559 方块消除 Blocks(区间dp)

    一道区间dp好题,在GZY的ppt里,同时在洛谷题解里看见了Itst orz. 题目大意 有n个带有颜色的方块,没消除一段长度为 \(x\) 的连续的相同颜色的方块可以得到 \(x^2\) 的分数,用 ...

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

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

  8. [Luogu2135] 方块消除【区间Dp】

    Online Judge:P2135 方块消除(这题不用预处理) Label:区间Dp 题目描述 Jimmy最近迷上了一款叫做方块消除的游戏.游戏规则如下:n个带颜色方格排成一列,相同颜色的方块连成一 ...

  9. 区间dp总结篇

    前言:这两天没有写什么题目,把前两周做的有些意思的背包题和最长递增.公共子序列写了个总结.反过去写总结,总能让自己有一番收获......就区间dp来说,一开始我完全不明白它是怎么应用的,甚至于看解题报 ...

随机推荐

  1. python(九)迭代器和生成器

    一.迭代 迭代就是逐个并且单向访问容器 (这里的容器暂时指数据类型,比如list和dict) 中的元素的行为.举个例子:将一个长度为五的数组逐个从头到尾(即单向)打印的方式称之为迭代.如下图. > ...

  2. 20165221 JAVA第一周学习心得及体会

    JAVA入门的理论学习 在JAVA2使用教程的网课学中,分为以下几个模块讲解的 JAVA的地位 JAVA的特点 安装JDK(Java Develepement Kit) Java程序的开发步骤 简单的 ...

  3. flask 源码剖析

    flask 上下文管理源码流程及涉及的部分技术点 [flask源码梳理]之一  偏函数_mro [flask源码梳理]之二  面向对象中__setattr__ [flask源码梳理]之三  Local ...

  4. workqueue --最清晰的讲解

    带你入门: 1.INIT_WORK(struct work_struct *work, void (*function)(void *), void *data) 上面一句只是定义了work和work ...

  5. HAProxy详解(一):HAProxy介绍【转】

    一.高性能负载均衡软件HAProxy介绍: 随着互联网业务的迅猛发展,大型电商平台和门户网站对系统的可用性和可靠性要求越来越高,高可用集群.负载均衡集群成为一种热门的系统架构解决方案.在众多的负载均衡 ...

  6. python3+selenium入门06-浏览器操作

    WebDriver主要提供元素操作的方法,但也提供了一些关于浏览器操作的方法,比如设置浏览器大小,浏览器前进,后退,刷新等 设置浏览器大小 有时候需要设置浏览器大小,比如访问收集网页,设置浏览器大小跟 ...

  7. Navicat for MySQL连接mysql数据库时提示错误:Can't connect to MySQL server (10060)

    导致些问题可能有以下几个原因: 1.网络不通: 2.服务未启动: 3.防火墙端口未开放: a)首先确认mysql配置正确,并正确开启 service mysqld start; 设置mysql远程连接 ...

  8. Nikitosh 和异或 —— 一道 trie 树的题用可持久化 trie 水 然后翻车了...

    题意简介 题目就是叫你找两个不重合的非空区间,使得这两个区间里的数异或后相加的和最大 (看到异或,没错就决定是你了可持久化trie!) 思路 水一波字典树,莫名觉得这题可持久化能过,于是水了一发挂了, ...

  9. epoll机制详解

    epoll机制详解 大牛的详解 epoll详解 什么是epoll? epoll是为处理大批量句柄而作了改进的poll, 是性能最好的多路I/O就绪通知方法; 只有三个系统调用: epoll_creat ...

  10. SQL Server 2017 安装详解

    SQL server 2017下载链接:https://pan.baidu.com/s/1FSzqJfHQAa0QpZ_fObrfjQ    提取码:1xvb  1.双击iso镜像文件 打开setup ...