Description

从前奶牛是不挑食的,但现在世道变了,她们变得非常挑剔。牧场里有N头奶牛,约翰 要向她们提供M种食物,第i头奶牛只会吃Pi号食物。

约翰每天都要打扫食槽,这件事非常累。奶牛沿着食槽排成一条直线,约翰在打扫时, 可以将食槽分割成若干个区间,如果一段区间中有K种不同的食物,那么这段区间打扫的时 间就是K2。请帮助约翰计划一下,怎么样才能使打扫整个食槽的时间最少。

Input Format

第一行:两个用空格分开的整数:N和M,1 ≤ M ≤ N ≤ 40000

第二行到N + 1行:第i + 1行有一个整数Pi,1 ≤ Pi ≤ M

Output Format

第一行:单个整数,表示约翰完成打扫的最短时间

-----------------------------------------------------------

正解 = 动归- =

考虑裸Dp :

状态 :f[i]表示到 i 这个头牛时,打少至少需要的时间

转移 :f[i]=min(f[j],cal(j+1,i)^2) (cal(j+1,i)=>从 j+1 到 i ) 食物种类数。

直接进行计算需要 O(n^3)

预处理cal 则需要 O  (n^2)

对于 N 的数据范围,这两种算法显然都不尽如人意

考虑一种新的转移

现看成一个染色问题- =,

设数为 pos[i] 为取 i 种颜色时,到当前点最远的区间,

则 f[i]=min(f[pos[j]-1]+j*j),

由于一个区间内的颜色不应超过 sqrt( n ),

所以转移的复杂度为 O( sqrt( n ) ) ,

考虑对 pos 的维护( 刚开始想歪了- =,谢谢lazycal大神指导)

当加尽一个颜色,显然只有从上一个当前这个颜色的点到它之间的颜色数会发生改变,

设数组last[i]表示 i 颜色的上一个位置,如果pos落在这之间则 pos[j]=pos[j-1]

注意处理 j 为当前最多颜色的情况。

维护复杂度 O( sqrt( n ) );

总复杂度: O( n sqrt( n ) )

代码如下:

 #include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
#include<queue>
#include<iostream>
#define INF 999999999999
#define LL long long
#define N 40004
#define Min(x,y) if(x>y) x=y
using namespace std ;
int n,m,pos[N],last[N],f[N],col;
int main(){
scanf("%d%d",&n,&m);
m=min(int(sqrt(n)),m);
memset(pos,-,sizeof pos);
for(int i=;i<=n;i++){
scanf("%d",&col);
if(i-&&last[col]==i-){
f[i]=f[i-];
last[col]=i;
continue;
}
for(int j=m;j-;j--)
if((pos[j]==-&&pos[j-]>last[col])||pos[j]>last[col])
pos[j]=pos[j-];
pos[]=i;
last[col]=i;
f[i]=f[i-]+;
for(int j=m; j ;j--)
if(pos[j]!=-)
Min(f[i],f[pos[j]-]+j*j);
}
printf("%d",f[n]);
}

usaco 打扫食槽的更多相关文章

  1. bzoj usaco 金组水题题解(1)

    UPD:我真不是想骗访问量TAT..一开始没注意总长度写着写着网页崩了王仓(其实中午的时候就时常开始卡了= =)....损失了2h(幸好长一点的都单独开了一篇)....吓得赶紧分成两坨....TAT. ...

  2. USACO . Your Ride Is Here

    Your Ride Is Here It is a well-known fact that behind every good comet is a UFO. These UFOs often co ...

  3. 【USACO 3.1】Stamps (完全背包)

    题意:给你n种价值不同的邮票,最大的不超过10000元,一次最多贴k张,求1到多少都能被表示出来?n≤50,k≤200. 题解:dp[i]表示i元最少可以用几张邮票表示,那么对于价值a的邮票,可以推出 ...

  4. USACO翻译:USACO 2013 NOV Silver三题

    USACO 2013 NOV SILVER 一.题目概览 中文题目名称 未有的奶牛 拥挤的奶牛 弹簧牛 英文题目名称 nocow crowded pogocow 可执行文件名 nocow crowde ...

  5. USACO翻译:USACO 2013 DEC Silver三题

    USACO 2013 DEC SILVER 一.题目概览 中文题目名称 挤奶调度 农场航线 贝西洗牌 英文题目名称 msched vacation shuffle 可执行文件名 msched vaca ...

  6. USACO翻译:USACO 2014 DEC Silver三题

    USACO 2014 DEC SILVER 一.题目概览 中文题目名称 回程 马拉松 奶牛慢跑 英文题目名称 piggyback marathon cowjog 可执行文件名 piggyback ma ...

  7. USACO翻译:USACO 2012 FEB Silver三题

    USACO 2012 FEB SILVER 一.题目概览 中文题目名称 矩形草地 奶牛IDs 搬家 英文题目名称 planting cowids relocate 可执行文件名 planting co ...

  8. USACO翻译:USACO 2012 JAN三题(3)

    USACO 2012JAN(题目三) 一.题目概览 中文题目名称 放牧 登山 奶牛排队 英文题目名称 grazing climb lineup 可执行文件名 grazing climb lineup ...

  9. USACO翻译:USACO 2012 JAN三题(2)

    USACO 2012 JAN(题目二) 一.题目概览 中文题目名称 叠干草 分干草 奶牛联盟 英文题目名称 stacking baleshare cowrun 可执行文件名 stacking bale ...

随机推荐

  1. Linux文件权限学习总结

    一.用户对文件或目录都有哪些权限? 四种:读.写.执行.没有权限 二.如何表示这四种权限? 如果用十进制数字表示,分别为:4.2.1.0:如果用字符表示,分别为:r.w.x.-.个人觉得,使用chmo ...

  2. 01_C语言基础

    内容提要: 1. C语言概述2. 数据类型.运算符与表达式3. C语言程序结构 4. VC6.0使用练习 知识详解01:C语言的历史 1. C语言与其它语言比较 汇编语言: (1).可直接对硬件进行操 ...

  3. 几个常用方法有效优化ASP.NET的性能

    一. 数据库访问性能优化 1),数据库的连接和关闭 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源.ASP.NET中提供了连 ...

  4. javascript读取本地文件

    由于浏览器考虑到安全问题,在修改本地文件方面除了IE几乎都不支持. IE例子 //读文件 function readFile(filename){ var fso = new ActiveXObjec ...

  5. tp中调用PHP系统扩展类

    例如使用Redis扩展类: use Reids; $redis = new Redis();

  6. Linux crontab定时执行任务 命令格式与详细例子

    基本格式 : * * * * * command 分 时 日 月 周 命令 第1列表示分钟1-59 每分钟用*或者 */1表示 第2列表示小时1-23(0表示0点) 第3列表示日期1-31 第4列表示 ...

  7. Vcl.FileCtrl.SelectDirectory

    描述:显示一个目录的对话框(属于Delphi) function SelectDirectory(var Directory: string; Options: TSelectDirOpts; Hel ...

  8. (转载)EhLib 在 Delphi 7 下的安装方法

    EhLib 在 Delphi 7 下的安装方法 1.将 EhLib 解压到一个目录,如:E:\VCL\EhLib: 2.将 EhLib 安装目录下 Common 目录.DataService 目录下的 ...

  9. SQLite批量插入,修改数据库 zt

    SQLiteConnection sqConnection = dataProvider.GetDbConnection(); sqConnection.Open(); SQLiteCommand s ...

  10. 在ios开发中有多少常用的加密解密方式(备用)

    最常用的是MD5和base64编码,还有DES 3DES AES加密 ios怎么实现RAS加密解密 最近几天折腾了一下如何在iOS上使用RSA来加密.iOS上并没有直接的RSA加密API.但是iOS提 ...