P2943 [USACO09MAR]Cleaning Up G
一句话题意:将一个数列分成若干段,每段的不和谐度为该段内不同数字数量的平方,求不和谐度之和的最小值。
令 \(f_i\) 表示前 \(i\) 个数的最小答案,很容易就能写出暴力转移方程:\(f_i=\min\{f_j+sum(j,i)\}(0\leq j<i)\)。\(sum(j,i)\) 表示 \(j\sim i\) 中不同数字的数量。
这样做是 \(n^2\) 的,考虑优化。发现 \(f\) 数组是单调不降的,在 \(sum(j,i)\) 相同时,\(j\) 取最小最优。继续推性质,发现答案最大是 \(n\)(每个数都分一段),所以 \(sum(j,i)\) 最大取 \(\lfloor\sqrt n\rfloor\) 否则显然不优。
然后就很简单了,我们对于 \(sum(j,i)\) 的每种取值都维护 \(j\) 的最小值即可。
所以做题要多推推性质啦。
时间复杂度 \(O(n\sqrt n)\)~
code:
#include<bits/stdc++.h>
using namespace std;
#define N 40005
#define Db double
#define Min(x,y)((x)<(y)?x:y)
#define For(i,x,y)for(i=x;i<=(y);i++)
int f[N],last[N],que[205];
int main()
{
int n,m,top,i,j,p;
scanf("%d%d",&n,&m);
top=int(sqrt(Db(n)));
For(i,1,m)last[i]=-1;
For(i,1,n)
{
f[i]=i;
scanf("%d",&p);
if(last[p]<que[1])
For(j,1,top)que[j-1]=que[j];
else
{
For(j,1,top)
if(que[j]==last[p])break;
while(j<top)que[j]=que[j+1],j++;
}
que[top]=i;
For(j,1,top)f[i]=Min(f[que[j-1]]+(top-j+1)*(top-j+1),f[i]);
last[p]=i;
}
cout<<f[n];
return 0;
}
P2943 [USACO09MAR]Cleaning Up G的更多相关文章
- [USACO09MAR]Cleaning Up
题目大意: 给你一个长度为n的序列a,你可以将其分为若干段,最终的答案为每一段不同数个数的平方和. 思路: 不难想到一个O(n^2)的DP: f[i]=min{f[j]+cnt(j,i)^2} 考虑一 ...
- Storyboards Tutorial 03
这一节主要介绍segues,static table view cells 和 Add Player screen 以及 a game picker screen. Introducing Segue ...
- 文件图标SVG
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink ...
- 洛谷2943 [USACO09MAR]清理Cleaning Up——转变枚举内容的dp
题目:https://www.luogu.org/problemnew/show/P2943 一下想到n^2.然后不会了. 看过TJ之后似乎有了新的认识. n^2的冗余部分在于当后面那部分的种类数一样 ...
- luogu 2943 [USACO09MAR]清理Cleaning Up 动态规划
非常巧妙的动态规划. 你会发现每一个区间地颜色种类不能超过 $\sqrt n$, 所以可以直接枚举区间颜色种类. 令这个为 $pos[j],$ 然后考虑如何去更新这个东西就行了. Code: #inc ...
- 3389: [Usaco2004 Dec]Cleaning Shifts安排值班
3389: [Usaco2004 Dec]Cleaning Shifts安排值班 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 102 Solved: ...
- data cleaning
Cleaning data in Python Table of Contents Set up environments Data analysis packages in Python Cle ...
- POJ 2376:Cleaning Shifts(贪心)
题目大意:有n个奶牛,他们负责在长为t个时间点的时间内值班,每个时间点至少有一个在值班,每个奶牛有一段空闲时间可以值班,求满足要求所需最少奶牛数量,无法满足则输出-1. 分析: 将奶牛空闲时间段看成线 ...
- 学习笔记(四): Representation:Feature Engineering/Qualities of Good Features/Cleaning Data/Feature Sets
目录 Representation Feature Engineering Mapping Raw Data to Features Mapping numeric values Mapping ca ...
随机推荐
- 【问题记录】—.NetCore 编译问题
最近在协助验证Jenkins自动编译发布时,对一些.Net Core编译问题进行了解决:特记录一下 一.编译生成netcoreapp目录问题 问题现象 .net core项目编译输出目录总是包含在[n ...
- 枚举的使用(限foton)
使用: /** * 服务真实性标签 * * @param realRepairs * 真实维修单数 * @param totalRepairs * 总单数 * @return */ public st ...
- 查询时间段内所有日期(限foton)
String dataStr = "2019-04"; try { Date date = DateUtils.parseDate(dataStr); Date startTime ...
- android 下的 handler Message
研究了下android下的 handler message 实现原理: new handler() 的时候 从ThreadLocal里面 获取当前线程下的 Looper实例下的 MessageQu ...
- Tarjan缩点入门
缩点 顾名思义,缩点就是把一个强连通分量缩成一个点 Tarjan 在dfs的过程中记录时间戳,若能够通过某个点返回已遍历的点,则可以缩点 inline void Tarjan(int x)// st栈 ...
- STM32入门系列-STM32外设地址映射
片上外设区分为四条总线,根据外设速度的不同,不同总线挂载着不同的外设,APB1挂载低速外设,APB2和AHB挂载高速外设.相应总线的最低地址我们称为该总线的基地址,总线基地址也是挂载在该总线上的首个外 ...
- 专题五:redis的数据类型之set
一.基本简介 现在出现了新的查询需求:存储大量数据的同时,还需要在查询方面提供更高的效率.虽然list满足存储大量的数据,也可以通过索引来进行访问,但是list底层是双向链表的结构,在查询上的效率并没 ...
- ASP.NET Core Authentication系列(二)实现认证、登录和注销
前言 在上一篇文章介绍ASP.NET Core Authentication的三个重要概念,分别是Claim, ClaimsIdentity, ClaimsPrincipal,以及claims-bas ...
- python机器学习识别手写数字
手写数字识别 关注公众号"轻松学编程"了解更多. 导包 import numpy as np import matplotlib.pyplot as plt %matplotlib ...
- Oracle初始——第一天
一.数据库分类 1.小型数据库:access.foxbase 2.中型数据库:informix.sql server.mysql 3.大型数据库:sybase.db2.oracle 二.注释 1./* ...