\(Des\)

• 有一排数量为N的方块,每次可以把连续的相同颜色的区间消除,得到分数为 区间长度的平方,然后左右两边连在一起,问最大分数为多少。

• n<=1

\(Sol\)

正解状态设得奇奇怪怪巧巧妙妙.

\(f[i][j][k]\)表示区间\([i,j]\)且\(j\)右边还有\(k\)个和\(j\)同色的方块,消除所有这些的最大分数.转移分为两种:

1.将右端点和多出的\(k\)个一起消掉,分数为\(f[i][j-1]+(k+1)^2\).

2.选一个与右端点同色的点\(p\),消掉\([p+1,j-1]\)使得\(p,j\)相邻,分数为\(f[i][p][k+1]+f[p+1][j-1][0]\).

那怎么样想到这个巧巧妙妙的状态呢:

首先这个题是有合并顺序的,可以考虑区间\(dp\),考虑对于区间\([l,r]\)能不能通过枚举中间点\(k\),用\([l,k],[k+1][r]\)转移.稍加思考就可以知道,这个亚子是不行的.这个题是"消消乐",可能中间的某个点会和边界一起消掉更优.于是就发现,这题并不是规规矩矩的区间$dp $,看能不能通过多记一维状态来解决这个问题...于是就聪聪明明地设出了这个状态强行.

这题好好写,瞎写一下就过了.

\(Code\)

Code

```cpp
#include
#include
#include
#define il inline
#define Ri register int
#define go(i,a,b) for(Ri i=a;i=b;--i)
#define e(i,u) for(Ri i=b[u];i;i=a[i].nt)
#define mem(a,b) memset(a,b,sizeof(a))
#define ll long long
#define db double
#define inf 2147483647
using namespace std;
il int read()
{
Ri x=0,y=1;char c=getchar();
while(c'9'){if(c=='-')y=-1;c=getchar();}
while(c>='0'&&c

最新文章

  1. 浅析jQuery删除节点的三个方法
  2. KVO内部实现原理
  3. spring事务学习(转账案例)(一)
  4. hrbustoj 1179:下山(DFS+剪枝)
  5. 004. 线程间操作无效: 从不是创建控件“textBox1”的线程访问它
  6. 2B相对来说,早期它的成长速度不会像2C那么快
  7. (android高仿系列)今日头条 --新闻阅读器 (三) 完结 、总结 篇
  8. mysql数据库误删除操作说明
  9. NPOI json转Excel DataTable转Excel ,Excel转DataTable
  10. JDK8帮助文档生成-笔记
  11. Luogu5283 十二省联考2019异或粽子(trie/可持久化trie+堆)
  12. pytest--fixture参数化的实现方式和执行顺序
  13. jsbridge的js封装
  14. Spring DAO模块
  15. 【LInux】查看Linux系统版本信息
  16. 3D游戏的角色移动
  17. 补齐-Django之Model操作
  18. ssm中整合Mybatis可以扫描到放在mapper下面的xml文件的方法
  19. EF Core扩展工具记录
  20. [No0000128]SQL纵表与横表互转

热门文章

  1. 2019-7-1-VisualStudio-快速设置启动项目
  2. 利用mock生成随机的东西
  3. 开源中国 2014 最受关注开源软件排行榜 TOP 50
  4. laravel 中使用tinker注入数据到数据库
  5. 实现三个div,固定左右两边的div宽为200,中间的div宽度自适应的四种方法
  6. Linux 使用 Speedtest 测试网速
  7. 深入java面向对象四:Java 内部类种类及使用解析(转)
  8. Python--day30--基于tcp协议的套接字socket
  9. js将单个反斜杠转化为斜杠的问题
  10. 2018-8-10-WPF-可获得焦点属性