CF868F Yet Another Minimization Problem
题目描述:
给定一个序列,要把它分成k个子序列。每个子序列的费用是其中相同元素的对数。求所有子序列的费用之和的最小值。
输入格式:第一行输入n(序列长度)和k(需分子序列段数)。下一行有n个数,序列的每一个元素。
输出格式:输出一个数,费用和的最小值。
2<=n<=10^5,2<=k<=min(n,20),序列的每一个元素值大于等于1,小于等于n。
Solution
思路还是比较单纯
\]
有m次每次是\(O(n)\)的转移.
可以利用决策单调性转移.
方法是将区间从中间分开.
找到分界点的决策点.
这样原区间和决策区间都被一份为二.
于是递归处理
就是实在有点麻烦.
Code
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
const int N = 100005;
const int inf = 0x3f3f3f3f;
using std:: fill;
using std:: swap;
using std:: min;
using std:: max;
int A[N];
long long f[N];
long long g[N];
int B[N];
void solve(int l, int r, int L, int R, long long P) {
if (l > r) return ;
int m = l + r >> 1;
int p = min(m, R);
int M = 0;
for (int i = l; i <= m; i += 1) P += B[A[i]], B[A[i]] += 1;
for (int i = L; i <= p; i += 1)
P -= (B[A[i]] -= 1), g[i] + P < f[m] ? M = i, f[m] = g[i] + P : 0;
for (int i = l; i <= m; i += 1) P -= (B[A[i]] -= 1);
for (int i = L; i <= p; i += 1) P += B[A[i]], B[A[i]] += 1;
solve(l, m - 1, L, M, P);
for (int i = L; i < M; i += 1) P -= (B[A[i]] -= 1);
for (int i = l; i <= m; i += 1) P += B[A[i]], B[A[i]] += 1;
solve(m + 1, r, M, R, P);
for (int i = l; i <= m; i += 1) B[A[i]] -= 1;
for (int i = L; i < M; i += 1) B[A[i]] += 1;
}
int main () {
int n, m;
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; i += 1)
scanf("%d", &A[i]);
for (int i = 1; i <= n; i += 1)
g[i] = g[i - 1] + B[A[i]], B[A[i]] += 1;
memset(B, false, sizeof B);
for (int i = 1; i <= m; i += 1) {
memset(f, 0x3f, sizeof f);
solve(1, n, 1, n, 0);
swap(f, g);
}
printf("%lld\n", f[n]);
return 0;
}
CF868F Yet Another Minimization Problem的更多相关文章
- CF868F Yet Another Minimization Problem 分治决策单调性优化DP
题意: 给定一个序列,你要将其分为k段,总的代价为每段的权值之和,求最小代价. 定义一段序列的权值为$\sum_{i = 1}^{n}{\binom{cnt_{i}}{2}}$,其中$cnt_{i}$ ...
- 洛谷CF868F Yet Another Minimization Problem(动态规划,决策单调性,分治)
洛谷题目传送门 貌似做所有的DP题都要先搞出暴力式子,再往正解上靠... 设\(f_{i,j}\)为前\(i\)个数分\(j\)段的最小花费,\(w_{l,r}\)为\([l,r]\)全在一段的费用. ...
- cf868F. Yet Another Minimization Problem(决策单调性 分治dp)
题意 题目链接 给定一个长度为\(n\)的序列.你需要将它分为\(m\)段,每一段的代价为这一段内相同的数的对数,最小化代价总和. \(n<=10^5,m<=20\) Sol 看完题解之后 ...
- CF868F Yet Another Minimization Problem(决策单调性)
题目描述:给定一个序列,要把它分成k个子序列.每个子序列的费用是其中相同元素的对数.求所有子序列的费用之和的最小值. 输入格式:第一行输入n(序列长度)和k(需分子序列段数).下一行有n个数,序列的每 ...
- CF868 F. Yet Another Minimization Problem 决策单调优化 分治
目录 题目链接 题解 代码 题目链接 CF868F. Yet Another Minimization Problem 题解 \(f_{i,j}=\min\limits_{k=1}^{i}\{f_{k ...
- Codeforces 868F Yet Another Minimization Problem 决策单调性 (看题解)
Yet Another Minimization Problem dp方程我们很容易能得出, f[ i ] = min(g[ j ] + w( j + 1, i )). 然后感觉就根本不能优化. 然后 ...
- CF 868 F. Yet Another Minimization Problem
F. Yet Another Minimization Problem http://codeforces.com/contest/868/problem/F 题意: 给定一个长度为n的序列.你需要将 ...
- Codeforces 868F Yet Another Minimization Problem(分治+莫队优化DP)
题目链接 Yet Another Minimization Problem 题意 给定一个序列,现在要把这个序列分成k个连续的连续子序列.求每个连续子序列价值和的最小值. 设$f[i][j]$为前 ...
- Yet Another Minimization Problem
Yet Another Minimization Problem 一个很显然的决策单调性. 方程是很显然的 $ f_i = \min{f_{j-1} + w(j,i)} $ . 它具有决策单调性,可以 ...
随机推荐
- MySQL - General error: 1390 Prepared statement contains too many placeholders
报错原因:预处理 SQL语句时使用的占位符数量超过了最大限制(默认65535). 解决方案:拆分查询语句,每次使用的占位符低于限制即可.
- poj:1850 Code(组合数学?数位dp!)
题目大意:字符的字典序依次递增才是合法的字符串,将字符串依次标号如:a-1 b-2 ... z-26 ab-27 bc-52. 为什么题解都是组合数学的...我觉得数位dp很好写啊(逃 f[pos][ ...
- [CEOI2017]Mousetrap
P4654 [CEOI2017]Mousetrap 博弈论既视感 身临其境感受耗子和管理的心理历程. 以陷阱为根考虑.就要把耗子赶到根部. 首先一定有解. 作为耗子,为了拖延时间,必然会找到一个子树往 ...
- Mysql数据库的主从复制
怎么安装mysql数据库,这里不说了,只说它的主从复制,步骤如下: 1.主从服务器分别作以下操作: 1.1.版本一致 1.2.初始化表,并在后台启动mysql 1.3.修改root的密码 2.修 ...
- ucenter搭建
使用xftp传到虚拟机.解压[root@ygy130 ~]# unzip -o -d ./Ucenter_1.6 UCenter_1.6.0_SC_UTF8.zip [root@ygy130 ~]# ...
- python获取当前工作目录
py文件所在位置/test/pj/hello.py 用户所在位置:/ 用户执行命令python /test/pj/hello.py 1. os.getcwd() 返回的是执行命令的位置 / 2.sys ...
- VC使用sqlite
SQLite可以到官方站点(http://www.sqlite.org/download.html)下载:Linux,Mac OS X, Windows下的已编译文件以及源代码.帮助文档. SQLit ...
- 开发系统级应用不被Kill
一.设置方法 (1) 在AndroidManifest中application根节点下,添加如下代码: android:persistent="true" (2) 将应用程序pus ...
- HDU1711 KMP(模板题)
Number Sequence Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- [洛谷P2610] [ZJOI2012]旅游
洛谷题目链接:[ZJOI2012]旅游 题目描述 到了难得的暑假,为了庆祝小白在数学考试中取得的优异成绩,小蓝决定带小白出去旅游~~ 经过一番抉择,两人决定将T国作为他们的目的地.T国的国土可以用一个 ...