非常巧妙的动态规划.

你会发现每一个区间地颜色种类不能超过 $\sqrt n$, 所以可以直接枚举区间颜色种类.

令这个为 $pos[j],$ 然后考虑如何去更新这个东西就行了.

Code:

#include <bits/stdc++.h>
#define N 40004
#define setIO(s) freopen(s".in","r",stdin)
using namespace std;
int p[N],lst[N],nex[N],pos[N],cn[N],f[N],cnt[N];
int main()
{
int i,j,n,m;
// setIO("input");
scanf("%d%d",&n,&m);
for(i=1;i<=n;++i)
{
scanf("%d",&p[i]);
lst[i]=0, nex[i]=n+1;
if(cn[p[i]])
{
nex[cn[p[i]]]=i;
lst[i]=cn[p[i]];
}
cn[p[i]]=i;
f[i]=1000000006;
}
int t=sqrt(n);
for(i=1;i<=n;++i) pos[i]=1;
f[0]=0;
for(i=1;i<=n;++i)
{
for(j=1;j<=t;++j)
{
if(lst[i]<pos[j]) ++cnt[j];
if(cnt[j]>j)
{
--cnt[j];
for(;nex[pos[j]]<i;) ++pos[j];
++pos[j];
}
f[i]=min(f[i], f[pos[j]-1]+(j*j));
}
}
printf("%d\n",f[n]);
return 0;
}

  

最新文章

  1. iOS开发系列--Objective-C之协议、代码块、分类
  2. HTML5学习笔记三 HTML元素、属性、标题、段落简介
  3. Map集合的应用及其遍历方式
  4. hdu 3089 约瑟夫环
  5. Linux 内核动态函数调用可视化工具
  6. VB学习笔记
  7. Java多线程初学者指南(4):线程的生命周期
  8. Can&#39;t connect to MySQL server on localhost (10061)解决方法
  9. C#中的线程(下)-多线程
  10. Android使用surface直接显示yuv数据(三)
  11. Java基础(6)- 面向对象解析
  12. Oracle导出表数据与导入表数据dmp,以及导入导出时候常见错误
  13. Js_protoType_原型
  14. Django之views视图函数
  15. HDU排序水题
  16. Tensorflow数据读取的方式
  17. idea入手配置
  18. Linux中的阻塞机制
  19. 微信小程序背景音频播放分享功能
  20. 使用JavaScript获取CSS伪元素属性

热门文章

  1. SAS学习笔记2 基础函数应用
  2. shell习题第27题:带选项的增删用户脚本
  3. uboot中打开 debug调试信息的方法
  4. 一个农民工自学java找到工作的励志故事
  5. SpringFramework5.0 @Indexed注解 简单解析
  6. Windows 10 下 Linux 子系统的安装和使用
  7. pytorch入门1——简单的网络搭建
  8. ubuntu打开终端
  9. 理解 HTTPS 工作原理(公钥、私钥、签名、数字证书、加密、认证)(转)
  10. Xen 虚拟化技术