【BZOJ1584】[Usaco2009 Mar]Cleaning Up 打扫卫生【DP】

原创 2016年05月31日 15:31:29

【题目链接】

【hzwer的题解】

维护转移位置的数组有点神。。

/* Telekinetic Forest Guard */
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>

using namespace std;

const int maxn = 40005, inf = 0x3f3f3f3f;

int n, m, num[maxn], dp[maxn], pos[maxn], pre[maxn], cnt[maxn];

inline int iread() {
	int f = 1, x = 0; char ch = getchar();
	for(; ch < '0' || ch > '9'; ch = getchar()) f = ch == '-' ? -1 : 1;
	for(; ch >= '0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';
	return f * x;
}

int main() {
	n = iread(); m = iread();
	for(int i = 1; i <= n; i++) num[i] = iread(), dp[i] = inf, pre[i] = -1;
	n = unique(num + 1, num + 1 + n) - (num + 1);

	m = sqrt(n);
	dp[0] = 0;
	for(int i = 1; i <= n; i++) {
		for(int j = 1; j <= m; j++) if(pre[num[i]] <= pos[j]) cnt[j]++;
		pre[num[i]] = i;
		for(int j = 1; j <= m; j++) if(cnt[j] > j) {
			int t = pos[j] + 1;
			for(; pre[num[t]] > t; t++);
			pos[j] = t; cnt[j]--;
		}
		for(int j = 1; j <= m; j++) dp[i] = min(dp[i], dp[pos[j]] + j * j);
	}
	printf("%d\n", dp[n]);
	return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

【bzoj1584】[Usaco2009 Mar]Cleaning Up 打扫卫生 DP

Description有N头奶牛,每头那牛都有一个标号Pi,1
  • w_yqts
  • w_yqts
  • 2018年01月03日 11:31
  • 48

bzoj1584 [Usaco2009 Mar]Cleaning Up 打扫卫生 dp

题意:有N头奶牛,每头那牛都有一个标号Pi,1
  • qq_35866453
  • qq_35866453
  • 2017年05月20日 15:25
  • 85

[bzoj1584][Usaco2009 Mar]Cleaning Up 打扫卫生

Orz w_yqts 卡了18次,终于rank1了… f[i]表示以i为结尾的最小代价 f[i]最大为i(每个点单独一段) f[i]=min{f[j]+cnt(j+1~i)^2} 若cnt(...
  • YZHYZHYZH3
  • YZHYZHYZH3
  • 2018年01月03日 13:34
  • 57

bzoj1584【Usaco2009 Mar】Cleaning Up 打扫卫生

思路很好的DP题
  • AaronGZK
  • AaronGZK
  • 2016年02月27日 20:16
  • 2001

[bzoj1584] [Usaco2009 Mar]Cleaning Up 打扫卫生

[bzoj1584] [Usaco2009 Mar]Cleaning Up 打扫卫生Description有N头奶牛,每头那牛都有一个标号Pi,1 ...
  • LGD_HXL
  • LGD_HXL
  • 2017年05月04日 21:41
  • 112

[BZOJ1584][Usaco2009 Mar]Cleaning Up 打扫卫生(dp+数学相关优化)

题目描述传送门题解这题n2n^2的暴力非常好想,预处理[l,r]有多少种食物sum(l,r),然后f(i)=min{f(j)+sum(j+1,i)2}(1...
  • Clove_unique
  • Clove_unique
  • 2017年02月03日 20:11
  • 315

BZOJ1584 USACO 2009 Mar Gold 2.Cleaning Up

题目大意:有长度为N的颜色段,共有m种颜色,要将其划分成若干段,每一段的费用为这一段的不同颜色的数目的平方。求最小总费用。 Sol: 首先我们注意到答案不超过n,因为我们显然可以将每一个划分为一段...
  • wyfcyx_forever
  • wyfcyx_forever
  • 2014年09月22日 08:07
  • 1157

1584: [Usaco2009 Mar]Cleaning Up 打扫卫生

题目链接题目大意:n个数,分成若干段,若该段中有k个不同的数,定义该段的费用k*k,求最小费用题解:只会n^2……f(i)=min{f(j)+sum(j+1,i)2}(0≤j...
  • Mmh2000
  • Mmh2000
  • 2017年09月09日 08:55
  • 213

[BZOJ3401] [Usaco2009 Mar]Look Up 仰望

传送门http://www.lydsy.com/JudgeOnline/problem.php?id=3401题目大意询问每一位置右边第一个比它大的数题解单调队列var ans,x,t:array[...
  • slongle_amazing
  • slongle_amazing
  • 2015年12月12日 18:52
  • 339

bzoj1584 [ Usaco2009 Mar ] --DP

题目大意:有N头奶牛,每头那牛都有一个标号Pi,1   思路:显然如果连续的一段数字相同,我们可以把它们合并成一个数字。 用f[i]表示在1~i这一段的最小不河蟹度。因为答案最大为n,显然不可能出现...
  • gjghfd
  • gjghfd
  • 2017年05月26日 16:41
  • 49
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【BZOJ1584】[Usaco2009 Mar]Cleaning Up 打扫卫生【DP】
举报原因:
原因补充:

(最多只允许输入30个字)