BZOJ1584 [Usaco2009 Mar]Cleaning Up 打扫卫生

时间:2023-01-07 09:54:49

令$f[i]$表示以i为结尾的答案最小值,则$f[i] = min \{f[j] + cnt[j + 1][i]^2\}_{1 \leq j < i}$,其中$cnt[j + 1][i]$表示$[j + 1, i]$内有几个不同的数

对于区间长度为$k$,则答案最大值就是$\sqrt{k}$,所以对于每个$i$我们其实只要枚举$\sqrt{i}$个值就好了

 /**************************************************************
Problem: 1584
User: rausen
Language: C++
Result: Accepted
Time:112 ms
Memory:1120 kb
****************************************************************/ #include <cstdio>
#include <algorithm> using namespace std;
const int N = 4e4 + ;
const int MXlen = ; int n, m;
int a[N], f[N], seq[MXlen], now[MXlen];
int st, mxlen, nowlen; inline int read(); inline int sqr(int x) {
return x * x;
} int main() {
int i, j;
n = read(), m = read();
for (i = ; i <= n; ++i) a[i] = read();
for (mxlen = ; mxlen * mxlen <= n; ++mxlen);
--mxlen;
for (i = ; i <= n; ++i) {
f[i] = i;
for (st = , j = ; j <= nowlen; ++j)
if (seq[j] == a[i]) {
st = j;
break;
}
if (!st) {
if (nowlen != mxlen) {
seq[++nowlen] = a[i];
now[nowlen] = i;
} else {
for (j = ; j < nowlen; ++j)
seq[j] = seq[j + ], now[j] = now[j + ];
seq[nowlen] = a[i], now[nowlen] = i;
}
} else {
for (j = st; j < nowlen; ++j)
seq[j] = seq[j + ], now[j] = now[j + ];
seq[nowlen] = a[i], now[nowlen] = i;
}
for (j = nowlen; j >= ; --j)
f[i] = min(f[i], f[now[j - ]] + sqr(nowlen - j + ));
}
printf("%d\n", f[n]);
return ;
} inline int read() {
static int x;
static char ch;
x = , ch = getchar();
while (ch < '' || '' < ch)
ch = getchar();
while ('' <= ch && ch <= '') {
x = x * + ch - '';
ch = getchar();
}
return x;
}

BZOJ1584 [Usaco2009 Mar]Cleaning Up 打扫卫生的更多相关文章

  1. 【动态规划】bzoj1584&colon; &lbrack;Usaco2009 Mar&rsqb;Cleaning Up 打扫卫生

    思路自然的巧妙dp Description 有N头奶牛,每头那牛都有一个标号Pi,1 <= Pi <= M <= N <= 40000.现在Farmer John要把这些奶牛分 ...

  2. &lbrack;BZOJ1584&rsqb; &lbrack;Usaco2009 Mar&rsqb;Cleaning Up 打扫卫生(DP)

    传送门 不会啊,看了好久的题解才看懂 TT 因为可以直接分成n段,所以就得到一个答案n,求解最小的答案,肯定是 <= n 的, 所以每一段中的不同数的个数都必须 <= sqrt(n),不然 ...

  3. bzoj1584 &lbrack;Usaco2009 Mar&rsqb;Cleaning Up 打扫卫生 动态规划&plus;思维

    Description 有N头奶牛,每头那牛都有一个标号Pi,1 <= Pi <= M <= N <= 40000.现在Farmer John要把这些奶牛分成若干段,定义每段的 ...

  4. DP经典 BZOJ 1584&colon; &lbrack;Usaco2009 Mar&rsqb;Cleaning Up 打扫卫生

    BZOJ 1584: [Usaco2009 Mar]Cleaning Up 打扫卫生 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 419  Solve ...

  5. BZOJ&lowbar;1584&lowbar;&lbrack;Usaco2009 Mar&rsqb;Cleaning Up 打扫卫生&lowbar;DP

    BZOJ_1584_[Usaco2009 Mar]Cleaning Up 打扫卫生_DP Description 有N头奶牛,每头那牛都有一个标号Pi,1 <= Pi <= M <= ...

  6. bzoj&colon;1584&colon; &lbrack;Usaco2009 Mar&rsqb;Cleaning Up 打扫卫生

    Description 有N头奶牛,每头那牛都有一个标号Pi,1 <= Pi <= M <= N <= 40000.现在Farmer John要把这些奶牛分成若干段,定义每段的 ...

  7. &lbrack;bzoj1587&rsqb; &lbrack;Usaco2009 Mar&rsqb;Cleaning Up 打扫卫生

    首先(看题解)可得...分成的任意一段中的不同颜色个数都<=根号n...不然的话直接分成n段会更优= = 然后就好做多了.. 先预处理出对于每头牛i,和它颜色相同的前一头和后一头牛的位置. 假设 ...

  8. 【BZOJ】1584&colon; &lbrack;Usaco2009 Mar&rsqb;Cleaning Up 打扫卫生

    [算法]DP+数学优化 [题意]把n个1~m的数字分成k段,每段的价值为段内不同数字个数的平方,求最小总价值.n,m,ai<=40000 [题解] 参考自:WerKeyTom_FTD 令f[i] ...

  9. bzoj 1584&colon; &lbrack;Usaco2009 Mar&rsqb;Cleaning Up 打扫卫生【dp】

    参考:http://hzwer.com/3917.html 好神啊 注意到如果分成n段,那么答案为n,所以每一段最大值为\( \sqrt{n} \) 先把相邻并且值相等的弃掉 设f[i]为到i的最小答 ...

随机推荐

  1. 解决select2在bootstrap的modal中默认不显示的问题

    在Bootstrap中的Modal,select2插件会有不显示,因为其z-index小于modal,还有另外一个问题是,修正z-index之后,select2不会自动失去焦点的问题.代码解决如下: ...

  2. 理解C&num; 4 dynamic&lpar;3&rpar; – DynamicObject的使用

    上篇文章"理解C# 4 dynamic(2) – ExpandoObject的使用" 了解了ExpandoObject的基本使用. 但ExpandoObject的问题就是它是一个万 ...

  3. Java应用程序实现屏幕的&quot&semi;拍照&quot&semi;

    有时候,在Java应用程序开发中,如:远程监控或远程教学,常常需要对计算机的屏幕进行截取,由于屏幕截取是比较接近操作系统的操作,在Windows操作系统下,该操作几乎成了VC.VB等的专利,事实上,使 ...

  4. &lbrack;CSS&rsqb;cursor鼠标样式

     用css控制鼠标样式的语法如下: <span style="cursor:*">文本或其它页面元素</span>  把 * 换成如下15个效果的一种:   ...

  5. c&num;&period;net 获取时间日期年月日时分秒格式

    今天写代码发现两个比较不错的分享下:1.DateTime.ParseExact很多时候我们获取的时间是数字形式表示的,好比20140127134015.927856,通过这个方法DateTime.Pa ...

  6. c语言-转义序列

    字符组合是由反斜杠 (\) 后接字母或位组合构成的字符组合.若要显示换行符,单引号或某些其他字符在字符串末尾,必须使用转义序列. 转义序列被视为单个字符,因此,它是有效的字符常数. 转义序列通常用于指 ...

  7. 【Zookeeper】源码分析之请求处理链(三)

    一.前言 在分析了PrepRequestProcessor处理器后,接着来分析SyncRequestProcessor,该处理器将请求存入磁盘,其将请求批量的存入磁盘以提高效率,请求在写入磁盘之前是不 ...

  8. PHP判断访问系统的用户设备类型

    当今的电子设备越来越多,我们在开发过程中往往也需要分析用户使用的电子设备类型.下面是采用PHP代码来获取用户使用的哪些类型的电子设备来访问自己的平台. /** * 用户设备类型 * @return s ...

  9. Docker Data Center系列(四)- 离线安装UCP和DTR

    本系列文章演示如何搭建一个mini的云平台和DevOps实践环境. 基于这套实践环境,可以部署微服务架构的应用栈,演练提升DevOps实践能力. 1 离线安装UCP 1.1 可用版本 Version ...

  10. genymotion和adb的解决方法

    问题: 安装了genymotion后.再单独安装了adb 然后在关闭genymotion后,输入adb devices,下方显示为空,然后打开genymotion,cmd输入adb devices,显 ...