A93904.Alice 的分段游戏
普及+/提高
通过率:0%
时间限制:1.00s
内存限制:128MB
题目描述
给定一个长度为 n 的序列 a1,a2,…,an(元素为正整数)。你需要把它划分成恰好 k 个连续非空段,设第 t 段为区间 [Lt,Rt],并定义一段的代价为:
cost(L,R)=x∑(2#{i∈[L,R]∣ai=x}).
也就是说,在同一段中,每个数的出现次数为 c 就会贡献 (2c) 的代价。请最小化 k 段代价之和:
mint=1∑kcost(Lt,Rt),
并输出该最小值。
输入格式
- 第一行两个整数 n,k。
- 第二行 n 个整数 a1,a2,…,an。
输出格式
输出一个整数,表示最小总代价。
输入输出样例
输入#1
5 2 1 2 1 2 1
输出#1
1
输入#2
6 3 1 1 1 2 2 3
输出#2
1
说明/提示
数据范围
- 1≤n≤2×105;
- 1≤k≤min(n,20);
- 1≤ai≤2×105;
- 答案不超过 263−1(使用 64 位有符号整数即可)。
测试点与数据范围
| 测试点 | 规模约束 |
|---|---|
| 1∼6 | n≤2×104, k≤10 |
| 7∼20 | n≤2×105, k≤20 |
样例解释
-
样例一 : 解释:一种最优分法是 [1,2,1] ∣ [2,1]。第一段中 1 出现 1 次贡献 1,第二段中没有重复对,总代价为 1。
-
样例二: 解释:可分为 [1,1] ∣ [1,2] ∣ [2,3],总代价 1。