题意:有n个带颜色的方块,同种颜色的方块连成一个区域,每次可以消除一个区域的方块x,然后得到分数x2,右边的方块左移,然后问求最大的分数。

思路:区间dp,dp(i,j,k)表示区间(i,j)在右边添上k个颜色与j相同的方块的最优解。对于每个状态,如果消去j,状态转移到dp(i,p-1,0)+(j-p+k+1)2,要不然枚举q<p使得a[q]=a[j]且a[q]不等于a[q+1],转移到dp(q+1,p-1,0)+dp(i,q,j-p+k+1);

code:

#include <bits/stdc++.h>
using namespace std;typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;const int INF=0x3fffffff;
const int inf=-INF;
const int N=1000000;
const int M=205;
const int mod=1000000007;
const double pi=acos(-1.0);#define cls(x,c) memset(x,c,sizeof(x))
#define cpy(x,a) memcpy(x,a,sizeof(a))
#define ft(i,s,n) for (int i=s;i<=n;i++)
#define frt(i,s,n) for (int i=s;i>=n;i--)
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define lrt  rt<<1
#define rrt  rt<<1|1
#define middle int m=(r+l)>>1
#define lowbit(x) (x&-x)
#define pii pair<int,int>
#define mk make_pair
#define IN freopen("in.txt","r",stdin);
#define OUT freopen("out.txt","w",stdout);int n,v[M];
int dp[M][M][M];
int sol(int l,int r,int k){if (l>r) return 0;int& ans=dp[l][r][k];if (ans) return ans;ans=sol(l,r-1,0)+(k+1)*(k+1);frt(i,r-1,l){if (v[i]==v[r])ans=max(ans,sol(l,i,k+1)+sol(i+1,r-1,0));}return ans;
}
int main()
{int T;scanf("%d",&T);ft(ca,1,T){scanf("%d",&n);ft(i,1,n) scanf("%d",&v[i]);cls(dp,0);printf("Case %d: %d\n",ca,sol(1,n,0));}
}

uva 10559——Blocks相关推荐

  1. UVA 10559 Blocks 方块消除

    [分析] 为了叙述方便,设左数第i个方块的颜色为A[i].按照线性结构动态规划的常见思路,设d(i,j)表示子序列i-j的最大得分,但是似乎无法用d(i,k)和d(k,j)来计算d(i,j),因为可能 ...

  2. 100道动态规划——34 UVA 10559 Blocks 状态的定义 状态转移方程

    好吧,我想到的是枚举决策... 居然是个类似于区间DP的感觉.恩..确实是呀,只不过是需要在DP的时候附加上额外的条件 定义状态dp[i][j][k]表示区间i~j且右边附加了k个与j同色的方块的最大 ...

  3. Uva 10559 消除方块

    题意: 每次可以选择一个区间(连续相同的序列)消除,得分为 len*len:问最大得分. 分析: 很容易想到是区间DP,但是不像普通的区间DP一样切割方式~~~ 如果定义 d[ i ][ j ] 区间 ...

  4. 紫书《算法竞赛入门经典》

    紫书<算法竞赛入门经典>题目一览 第3章 数组和字符串(例题) UVA 272 TEX Quotes UVA 10082 WERTYU UVA 401 Palindromes UVA 34 ...

  5. UVa在线比赛单题汇总-----DP专题

    动态规划基础 例题 LA 3882 UVa 3882 - And Then There Was One 递推------------无力orz UVa 10635 10635 - Prince and ...

  6. the blocks problem(uva 101 or poj 1208)

    题目描述见:uva 101 or poj 1208 关键在于彻底理解题目中搬积木的几个命令的含义,见具体分析 如果还不能理解题意,那么找一个正确通过的代码,编译并输入测试数据,查看其每一个命令的执行情 ...

  7. 《算法竞赛入门经典》 例题5-2 木块问题(The Blocks Problem,UVa 101)

    原题及翻译 Many areas of Computer Science use simple, abstract domains for both analytical and empirical ...

  8. UVA - 101:The Blocks Problem

    原本以为是一道很简单的模拟题,结果写了一个小时...很长时间不碰算法题,的确手感差很多.不过我觉得随着刷题慢慢多起来应该会好的. 题目的意思也有点含糊,需要自己去猜,大概意思就是槽里有一堆木头,每个槽 ...

  9. uva 101 The Blocks Problem

    1.     move a onto b在將a搬到b上之前,先將a和b上的積木放回原來的位置(例如:1就放回1的最開始位罝) 2. move a over b在將a搬到b所在的那堆積木之上之前,先將a ...

最新文章

  1. Python培训分享:Python内置标准异常及其解析
  2. Microbiome:应用多维宏组学方法协同揭示复杂细菌群落对目标底物代谢的菌间相互关系(一作解读)...
  3. 微软一顿操作猛如虎,PowerShell排名直线上升
  4. php制作明信片,用PS如何制作明信片?PS制作明信片图文介绍
  5. 通过Web Service获取天气预报并朗读
  6. javascript小技巧(转)
  7. 存储过程、游标和触发器
  8. 代码学习-Linux内核网卡收包过程(NAPI)
  9. uniapp+nvue开发之仿微信语音+视频通话功能 :实现一对一语音视频在线通话
  10. 触摸屏计算机技术参数,触摸屏硬件安装—— 触摸屏参数设置
  11. 解锁黑科技!辅助驾驶系统为卡车安全行驶保驾护航
  12. 附录3-form标签常用属性
  13. 【C】 小球自由下落
  14. 打印表格留标题怎么设置_表格打印怎么保留标题!EXCEL打印如何设置每页都显示标题栏...
  15. 《计算机导论》课后习题答案
  16. 人脸检测与识别:AlexNet人脸检测
  17. sfml-tutorials 官方教程的嘟嘟翻译 windows篇
  18. Android彩信介绍
  19. linux常规实战(三)简单的samba共享实现
  20. Echarts利用多X轴实现七天天气预报效果

热门文章

  1. seajs-require使用示例
  2. css多浏览常见问题
  3. js笔记(八)ES6
  4. jackson - @JsonProperty的使用
  5. Problem E: 平面上的点——Point类 (II)
  6. JDBC常用API小结
  7. node.js基础:数据存储
  8. 【转载】Ubuntu环境下配置Android Studio
  9. id和instancetype的区别
  10. php 类静态变量 和 常量消耗内存及时间对比