Yet Another Minimization Problem
Yet Another Minimization Problem
一个很显然的决策单调性。
方程是很显然的 $ f_i = \min{f_{j-1} + w(j,i)} $ 。
它具有决策单调性,可以参考钟神的 Blog
我们考虑怎么实现这个东西,按照上次 DLS 讲的,考虑 solve(l,r,L,R)
表示 我们当前在处理 $ l,r $ 的 $ dp $ 值,我们知道当前决策点在 $ L,R $ 内。
然后考虑怎么求,先对 $ mid $ 暴力跑出决策位置,然后分治 solve(l,mid-1,L,op),solve(mid+1,r,op,R)
。复杂度是 $ nlogn $ 的,因为每一层分治的时间是 $ O(r - l + R - L) $
但是还得求 $ w(l,r) $,这个东西我们可以直接类似莫队来算,因为总的移动的位置的和就是前面的 $ R - L $ 的和,这个是不影响复杂度的。
代码很短,也很好写。。(没开llwa了两发
#include "iostream"
#include "algorithm"
#include "cstring"
#include "cstdio"
using namespace std;
#define MAXN 100006
#define chkmn( a , b ) ( (a) > (b) ? ( (a) = (b) , 1 ) : 0 )
#define chkmx( a , b ) ( (a) < (b) ? ( (a) = (b) , 1 ) : 0 )
#define f( a ) ( (a) > 0 ? (a) : 0 )
int n , k;
int A[MAXN] , cn[MAXN];
int L = 1 , R = 0;
long long cw , dp[MAXN] , nw[MAXN];
void upd(int c,int d){ cw += 1ll * d * cn[c] * (cn[c] - 1) / 2;}
long long getw( int l , int r ) {
while( L < l ) upd( A[L] , -1 ) , -- cn[A[L]] , upd( A[L] , 1 ) , ++ L;
while( R > r ) upd( A[R] , -1 ) , -- cn[A[R]] , upd( A[R] , 1 ) , -- R;
while( L > l ) -- L , upd( A[L] , -1 ) , ++ cn[A[L]] , upd( A[L] , 1 );
while( R < r ) ++ R , upd( A[R] , -1 ) , ++ cn[A[R]] , upd( A[R] , 1 );
return cw;
}
void solve( int l , int r , int L , int R ) {
if( l > r ) return;
int mid = l + r >> 1 , op; nw[mid] = 0x3f3f3f3f3f3f3f3f;
for( int i = min( R , mid ) ; i >= L ; -- i ) {
if( chkmn( nw[mid] , dp[i - 1] + getw( i , mid ) ) ) op = i;
}
if( l == r ) return;
solve( l , mid - 1 , L , op ) , solve( mid + 1 , r , op , R );
}
int main() {
cin >> n >> k;
for( int i = 1 ; i <= n ; ++ i ) scanf("%d",&A[i]);
memset( dp , 0x3f3f , sizeof dp ) , memset( nw , 0x3f3f , sizeof nw ) , dp[0] = 0;
for( int i = 1 ; i <= k ; ++ i ) {
solve( 1 , n , 1 , n );
swap( nw , dp );
}
cout << dp[n] << endl;
}
Yet Another Minimization Problem的更多相关文章
- Codeforces 868F Yet Another Minimization Problem 决策单调性 (看题解)
Yet Another Minimization Problem dp方程我们很容易能得出, f[ i ] = min(g[ j ] + w( j + 1, i )). 然后感觉就根本不能优化. 然后 ...
- CF868 F. Yet Another Minimization Problem 决策单调优化 分治
目录 题目链接 题解 代码 题目链接 CF868F. Yet Another Minimization Problem 题解 \(f_{i,j}=\min\limits_{k=1}^{i}\{f_{k ...
- 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]$为前 ...
- CodeForces 868F Yet Another Minimization Problem(决策单调性优化 + 分治)
题意 给定一个序列 \(\{a_1, a_2, \cdots, a_n\}\),要把它分成恰好 \(k\) 个连续子序列. 每个连续子序列的费用是其中相同元素的对数,求所有划分中的费用之和的最小值. ...
- 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]\)全在一段的费用. ...
- Codeforces 868F. Yet Another Minimization Problem【决策单调性优化DP】【分治】【莫队】
LINK 题目大意 给你一个序列分成k段 每一段的代价是满足\((a_i=a_j)\)的无序数对\((i,j)\)的个数 求最小的代价 思路 首先有一个暴力dp的思路是\(dp_{i,k}=min(d ...
- Codeforces 868F. Yet Another Minimization Problem
Description 给出一个长度为 \(n\) 的序列,你需要将它分为 \(k\) 段,使得每一段的价值和最小,每一段的价值是这一段内相同的数的个数 题面 Solution 容易想到设 \(f[i ...
随机推荐
- 初学Python-day7 案例(乘法口诀 已更新!!)
案例::(乘法口诀) 用for循环做乘法口诀: 1 # 第一种 2 for i in range(1, 10): 3 for j in range(1, i + 1): 4 print('{} * ...
- for...of 和 for...in 是否可以直接遍历对象,有什么解决方案
答案: for...of不能直接遍历对象,for in可以直接遍历对象 原因: for...of需要实现iterator接口,对象没有实现iterator接口 解决: const obj = {a: ...
- FastAPI 学习之路(四十六)WebSockets(二)
上一篇文章,我们分享了WebSockets一些入门的,我们这节课,在原来的基础上,对于讲解的进行一个演示.我们最后分享了依赖token等.首先我们对上次的代码进行调整. 我们之前分享FastAPI 学 ...
- JVM:内存模型
JVM:内存模型 说明:这是看了 bilibili 上 黑马程序员 的课程 JVM完整教程 后做的笔记 1. java 内存模型 很多人将[java 内存结构]与[java 内存模型]傻傻分不清,[j ...
- UltraSoft - Alpha - Scrum Meeting 7
Date: Apr 22th, 2020. Scrum 情况汇报 进度情况 组员 负责 昨日进度 后两日任务 CookieLau PM 完成课程中心的json格式传递 完成邮箱验证机制 刘zh 前端 ...
- [no_code][Alpha]项目展示博客
$( "#cnblogs_post_body" ).catalog() 团队项目链接 github 后端 github OCR文档-含部分所需测试代码目前private API调用 ...
- Spring Cloud Gateway夺命连环10问?
大家好,我是不才陈某~ 最近有很多小伙伴私信我催更 <Spring Cloud 进阶>,陈某也总结了一下,最终原因就是陈某之前力求一篇文章将一个组件重要知识点讲透,这样导致了文章篇幅很长, ...
- AXI总线简介、ID分析、DMA、Vivado烧录、系统集成
转载:https://blog.csdn.net/CrazyUncle/article/details/89918030?depth_1-utm_source=distribute.pc_releva ...
- 链表分割 牛客网 程序员面试金典 C++ Python
链表分割 牛客网 程序员面试金典 C++ Python 题目描述 编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前 给定一个链表的头指针 ListNode* p ...
- Python super(Todo,self).__init__() TypeError: super() argument 1 must be type, not classobj
示例如下 class A(): def __init__(self):pass class B(A): def __init__(self): super(A, self).__init__() 当调 ...