传送门

Luogu

解题思路

考虑区间 \(\text{DP}\)。

设 \(f[i][j][k]\) 表示 \([i,j]\) 这段区间接上后面 \(k\) 个与 \(j\) 颜色相同的块得到的答案。

转移就是:

\(f[i][j][k] = \max\left\{f[i][j][0]+(k+1)^2\right\}\)

\(f[i][j][k] = \max\left\{f[i][p][k+1]+f[p+1][j-1][0]\right\}(p\in[i, j]\text{且}c_p=c_j)\)

第一个方程就是把后面那一坨一起消掉,再消掉前面。

第二个方程就是在中间找一个与 \(j\) 颜色相同的点 \(p\) ,把 \([p+1,j-1]\) 这段先消掉,然后让剩下的两坨拼起来再消。

写成记搜很方便的说

细节注意事项

  • 咕咕咕

参考代码

  1. #include <algorithm>
  2. #include <iostream>
  3. #include <cstring>
  4. #include <cstdlib>
  5. #include <cstdio>
  6. #include <cctype>
  7. #include <cmath>
  8. #include <ctime>
  9. #define rg register
  10. using namespace std;
  11. template < typename T > inline void read(T& s) {
  12. s = 0; int f = 0; char c = getchar();
  13. while (!isdigit(c)) f |= (c == '-'), c = getchar();
  14. while (isdigit(c)) s = s * 10 + (c ^ 48), c = getchar();
  15. s = f ? -s : s;
  16. }
  17. const int _ = 202;
  18. int n, a[_], f[_][_][_], pre[_], las[_];
  19. inline int dfs(int i, int j, int k) {
  20. if (i > j) return 0;
  21. if (f[i][j][k]) return f[i][j][k];
  22. f[i][j][k] = max(f[i][j][k], dfs(i, j - 1, 0) + (k + 1) * (k + 1));
  23. for (rg int p = pre[j]; p >= i; p = pre[p])
  24. f[i][j][k] = max(f[i][j][k], dfs(i, p, k + 1) + dfs(p + 1, j - 1, 0));
  25. return f[i][j][k];
  26. }
  27. int main() {
  28. #ifndef ONLINE_JUDGE
  29. freopen("in.in", "r", stdin);
  30. #endif
  31. int T; read(T);
  32. for (rg int o = 1; o <= T; ++o) {
  33. memset(f, 0, sizeof f);
  34. memset(pre, 0, sizeof pre);
  35. memset(las, 0, sizeof las);
  36. read(n);
  37. for (rg int i = 1; i <= n; ++i) read(a[i]);
  38. for (rg int i = 1; i <= n; ++i) pre[i] = las[a[i]], las[a[i]] = i;
  39. printf("Case %d: %d\n", o, dfs(1, n, 0));
  40. }
  41. return 0;
  42. }

完结撒花 \(qwq\)

「UVA10559」Blocks的更多相关文章

  1. 「译」JUnit 5 系列:条件测试

    原文地址:http://blog.codefx.org/libraries/junit-5-conditions/ 原文日期:08, May, 2016 译文首发:Linesh 的博客:「译」JUni ...

  2. 「译」JUnit 5 系列:扩展模型(Extension Model)

    原文地址:http://blog.codefx.org/design/architecture/junit-5-extension-model/ 原文日期:11, Apr, 2016 译文首发:Lin ...

  3. JavaScript OOP 之「创建对象」

    工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程.工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题. function createPers ...

  4. 「C++」理解智能指针

    维基百科上面对于「智能指针」是这样描述的: 智能指针(英语:Smart pointer)是一种抽象的数据类型.在程序设计中,它通常是经由类型模板(class template)来实做,借由模板(tem ...

  5. 「JavaScript」四种跨域方式详解

    超详细并且带 Demo 的 JavaScript 跨域指南来了! 本文基于你了解 JavaScript 的同源策略,并且了解使用跨域跨域的理由. 1. JSONP 首先要介绍的跨域方法必然是 JSON ...

  6. 「2014-5-31」Z-Stack - Modification of Zigbee Device Object for better network access management

    写一份赏心悦目的工程文档,是很困难的事情.若想写得完善,不仅得用对工具(use the right tools),注重文笔,还得投入大把时间,真心是一件难度颇高的事情.但,若是真写好了,也是善莫大焉: ...

  7. 「2014-3-18」multi-pattern string match using aho-corasick

    我是擅(倾)长(向)把一篇文章写成杂文的.毕竟,写博客记录生活点滴,比不得发 paper,要求字斟句酌八股结构到位:风格偏杂文一点,也是没人拒稿的.这么说来,arxiv 就好比是 paper 世界的博 ...

  8. 「2014-3-17」C pointer again …

    记录一个比较基础的东东-- C 语言的指针,一直让人又爱又恨,爱它的人觉得它既灵活又强大,恨它的人觉得它太过于灵活太过于强大以至于容易将人绕晕.最早接触 C 语言,还是在刚进入大学的时候,算起来有好些 ...

  9. 「2014-3-13」Javascript Engine, Java VM, Python interpreter, PyPy – a glance

    提要: url anchor (ajax) => javascript engine (1~4 articles) => java VM vs. python interpreter =& ...

随机推荐

  1. C++中的sort函数和⾃定义cmp函数

    写在最前面,本文摘录于柳神笔记: sort 函数在头⽂件 #include ⾥⾯,主要是对⼀个数组进⾏排序( int arr[] 数组或 者 vector 数组都⾏), vector 是容器,要⽤ v ...

  2. Python笔记3

    类格式示例: class Student(): name = '' age = 0 def print_file(self): print('name:' + self.name) print('ag ...

  3. CURL_模拟登录

    <?php $curl = curl_init(); $url = "http://www.imooc.com/user/login"; //$url = "htt ...

  4. JDBC连接MySql例子

    1.注册MySql连接驱动 2.设置连接MySql连接字符串.用户名和密码 3.获取数据库连接 代码如下: // 加载驱动 Class.forName("com.mysql.jdbc.Dri ...

  5. Practical aspects of deep learning

    If your Neural Network model seems to have high variance, what of the following would be promising t ...

  6. Redis数据库在windows系统下的安装及使用

    1.下载 Redis官方是不支持windows的,但是Microsoft Open Tech group 在 GitHub上开发了一个Win64的版本,下载地址:https://github.com/ ...

  7. mysql之魔鬼训练营

    普通 + 中等 难度练习题 测试数据: --建表 --学生表 CREATE TABLE `Student`( `s_id` VARCHAR(20), `s_name` VARCHAR(20) NOT ...

  8. oracle连接种类

    等连接:连接条件使用等号 非等连接:连接条件使用等号以外的其它符号 内连接:根据指定的连接条件进行连接查询,满足连接条件的数据才会出现在结果集 外连接:在内连接的基础上,将某个连接表不符合连接条件的记 ...

  9. JavaScript 数字

    数字(Number)也称为数值或数. 数值直接量 当数字直接出现在程序中时,被称为数值直接量.在 JavaScript 程序中,直接输入的任何数字都被视为数值直接量. 示例1 数值直接量可以细分为整型 ...

  10. Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application

    在广播中启动一个Dialog时出现如下错误信息:Caused by: android.view.WindowManager$BadTokenException: Unable to add windo ...