luogu 2943 [USACO09MAR]清理Cleaning Up 动态规划
2024-10-06 14:44:53
非常巧妙的动态规划.
你会发现每一个区间地颜色种类不能超过 $\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;
}
最新文章
- iOS开发系列--Objective-C之协议、代码块、分类
- HTML5学习笔记三 HTML元素、属性、标题、段落简介
- Map集合的应用及其遍历方式
- hdu 3089 约瑟夫环
- Linux 内核动态函数调用可视化工具
- VB学习笔记
- Java多线程初学者指南(4):线程的生命周期
- Can&#39;t connect to MySQL server on localhost (10061)解决方法
- C#中的线程(下)-多线程
- Android使用surface直接显示yuv数据(三)
- Java基础(6)- 面向对象解析
- Oracle导出表数据与导入表数据dmp,以及导入导出时候常见错误
- Js_protoType_原型
- Django之views视图函数
- HDU排序水题
- Tensorflow数据读取的方式
- idea入手配置
- Linux中的阻塞机制
- 微信小程序背景音频播放分享功能
- 使用JavaScript获取CSS伪元素属性