2018.10.19 bzoj1584: Cleaning Up 打扫卫生(线性dp)
传送门
dp妙题。
考虑到每个位置分一组才花费nnn的贡献。
因此某一段不同的数的个数不能超过sqrt(n)sqrt(n)sqrt(n),于是对于当前的位置iii我们记pos[j]pos[j]pos[j]表示pos[j]+1pos[j]+1pos[j]+1到iii恰好有jjj个不同的数。
这样f[i]f[i]f[i]就可以从pos[j]pos[j]pos[j]转移过来。
由于pospospos数组最多sqrt(n)sqrt(n)sqrt(n)个因此时间复杂度O(n∗sqrt(n))O(n*sqrt(n))O(n∗sqrt(n))
代码:
#include<bits/stdc++.h>
#define N 40005
using namespace std;
inline int read(){
int ans=0;
char ch=getchar();
while(!isdigit(ch))ch=getchar();
while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
return ans;
}
int n,m,a[N],f[N],las[N],pos[N],cnt[N],tot=0;
int main(){
n=read(),m=read();
memset(cnt,0,sizeof(cnt));
for(int i=1;i<=n;++i){
int x=read();
if(x!=a[tot])a[++tot]=x;
}
n=tot,m=sqrt(n),f[0]=0;
for(int i=1;i<=n;++i){
f[i]=0x3f3f3f3f;
for(int j=1;j<=m;++j)if(las[a[i]]<=pos[j])++cnt[j];
las[a[i]]=i;
for(int j=1;j<=m;++j){
if(cnt[j]>j){
int tmp=pos[j]+1;
while(las[a[tmp]]>tmp)++tmp;
pos[j]=tmp,--cnt[j];
}
f[i]=min(f[i],f[pos[j]]+j*j);
}
}
cout<<f[n];
return 0;
}
2018.10.19 bzoj1584: Cleaning Up 打扫卫生(线性dp)的更多相关文章
- 「10.12」木板(数学)·打扫卫生(神仙DP)
A. 木板 一个很简单的数学题,简单推一下就好,路丽姐姐教你学数学. 将式子化出我们发现只需求出$i\times i/n$的个数 那么我们将$n$质因数分解,可知因子个数 为了整除$n$,令$i==\ ...
- [BZOJ1584]Cleaning Up 打扫卫生
Description 有N头奶牛,每头那牛都有一个标号Pi,1 <= Pi <= M <= N <= 40000.现在Farmer John要把这些奶牛分成若干段,定义每段的 ...
- [BZOJ1584] [Usaco2009 Mar]Cleaning Up 打扫卫生(DP)
传送门 不会啊,看了好久的题解才看懂 TT 因为可以直接分成n段,所以就得到一个答案n,求解最小的答案,肯定是 <= n 的, 所以每一段中的不同数的个数都必须 <= sqrt(n),不然 ...
- bzoj 1584: [Usaco2009 Mar]Cleaning Up 打扫卫生【dp】
参考:http://hzwer.com/3917.html 好神啊 注意到如果分成n段,那么答案为n,所以每一段最大值为\( \sqrt{n} \) 先把相邻并且值相等的弃掉 设f[i]为到i的最小答 ...
- bzoj1584 9.20考试 cleaning up 打扫卫生
1584: [Usaco2009 Mar]Cleaning Up 打扫卫生 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 549 Solved: 38 ...
- DP经典 BZOJ 1584: [Usaco2009 Mar]Cleaning Up 打扫卫生
BZOJ 1584: [Usaco2009 Mar]Cleaning Up 打扫卫生 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 419 Solve ...
- IDC Digital Transition Annual Festival(2018.10.19)
时间:2018.10.19地点:北京万达文化酒店
- 2018.10.19浪在ACM 集训队第一次测试赛
2018.10.19浪在ACM 集训队第一次测试赛 待参考资料: [1]:https://blog.csdn.net/XLno_name/article/details/78559973?utm_so ...
- 20172319 2018.10.19《Java程序设计教程》第7周课堂实践(补写博客)
20172319 2018.10.19 <Java程序设计教程>第7周课堂实践 课程:<程序设计与数据结构> 班级:1723 学生:唐才铭 学号:20172319 指导老师:王 ...
随机推荐
- spring boot 自定义异常
1.创建一个异常: public class LdapQueryException extends Exception { private Integer code; private String m ...
- icil 参考docker
@All 有不知道怎么用docker发布项目的,请参考 http://192.168.18.224:8888/svn/Enterprise/site/docker/overview of docker ...
- 一个NPOI导出到excel文件的范例记录
'使用NPOI写入新创建的excel文件,导出文件: Private Sub Sub_WriteXls() Dim XlsBook As XSSFWorkbook Dim XlsSheet As XS ...
- XE6 HTML设计器
XE6 自带的HTML编辑器很好用 File>New>Other>Web Documents>HTML Page 自动有code和Design,在Design标签可以拖放控件 ...
- Windows 域用户
Windows 2000 组及说明 分类: Windows 2000 的组分为Security 和 Distribution 两种. Security 类型是Windows 2000 唯一用于赋予权限 ...
- 安装oracle后java -version命令显示 jdk version "1.3.1"的原因
因为先装的JDK,后装了oracle,oracle的JDK配置把原来的jdk路径替换掉了. 我的电脑->属性->高级->环境变量->系统变量->PATH ,把JDK的路径 ...
- could not resolve property
could not resolve property(无法解析属性) 顾名思义在写hql语句的时候,属性写错了! 请检查大小写,是实体类的,不是数据库表的! 一个一个检查,仔细看!
- Haskell语言学习笔记(48)Data.Tuple
Data.Tuple fst :: (a,b) -> a fst (x,_) = x snd :: (a,b) -> b snd (_,y) = y curry :: ((a, b) -& ...
- jQuery中的几个模块总结
Query插件,以备并希望在前端方面有所长进.请批评指正. 一,类型判断全解 JQuery判断类型扩展方法:$.type() /*type: function( obj ) { if ( obj == ...
- error CS1010 CS8025 CS1012 CS1525 常见文档错误解决
error CS1010: Newline in constant error CS8025: Parsing error error CS1012: Too many characters in c ...