#分治,决策单调性dp#CF868F Yet Another Minimization Problem
题目
给定一个序列 \(a\),要把它分成 \(k\) 个子段。(\(n\leq 10^5,k\leq 20\))
每个子段的费用是其中相同元素的对数。求所有子段的费用之和的最小值。
分析
有一个很明显的\(dp\)就是设\(dp[i][k]\)表示前\(i\)个数分成\(k\)段的费用之和最小值,
那么\(dp[i][k]=\min\{dp[j][k-1]+calc(j+1,i)\}\)
可以发现\(dp[i][k]\)不会因为\(dp[i'][k]\)而改变,用分治解决
并且无法在\(O(1)\)时间内求出来,并且应该是具有决策单调性的,
考虑calc函数用类似于莫队的方法求解,那么就可以做到\(O(knlog_2n)\)
代码
#include <cstdio>
#include <cctype>
#include <cstring>
#define rr register
using namespace std;
typedef long long lll;
const int N=100011;
lll dp[N],f[N],now;
int a[N],cnt[N],n,m,Le=1,Ri;
inline signed iut(){
rr int ans=0; rr char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return ans;
}
inline lll answ(int l,int r){
while (Le<l) now-=--cnt[a[Le++]];
while (Le>l) now+=cnt[a[--Le]]++;
while (Ri<r) now+=cnt[a[++Ri]]++;
while (Ri>r) now-=--cnt[a[Ri--]];
return now;
}
inline void dfs(int l,int r,int L,int R){
if (l>r) return;
rr int mid=(l+r)>>1,MID=L;
rr lll ans=1ll<<60;
for (rr int j=L;j<mid&&j<=R;++j){
rr lll t=answ(j+1,mid);
if (f[j]+t<ans) ans=f[j]+t,MID=j;
}
dp[mid]=ans;
dfs(l,mid-1,L,MID),dfs(mid+1,r,MID,R);
}
signed main(){
n=iut(); m=iut();
for (rr int i=1;i<=n;++i) a[i]=iut();
for (rr int i=1;i<=n;++i) dp[i]=answ(1,i);
for (rr int i=2;i<=m;++i)
memcpy(f,dp,sizeof(dp)),dfs(1,n,1,n);
return !printf("%lld",dp[n]);
}
#分治,决策单调性dp#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]\)全在一段的费用. ...
- [BZOJ2739]最远点(DP+分治+决策单调性)
根据旋转卡壳,当逆时针遍历点时,相应的最远点也逆时针转动,满足决策单调性.于是倍长成链,分治优化DP即可,复杂度O(n^2). #include<cstdio> #include<a ...
- CF868F Yet Another Minimization Problem(决策单调性)
题目描述:给定一个序列,要把它分成k个子序列.每个子序列的费用是其中相同元素的对数.求所有子序列的费用之和的最小值. 输入格式:第一行输入n(序列长度)和k(需分子序列段数).下一行有n个数,序列的每 ...
- bzoj 2216: [Poi2011]Lightning Conductor【决策单调性dp+分治】
参考:https://blog.csdn.net/clove_unique/article/details/57405845 死活不过样例看了题解才发现要用double.... \[ a_j \leq ...
- BZOJ4426 :最大生产率(贪心+决策单调性DP)
题意:给出N个人,现在让你分P组,每组的工作效率是最小结束时间-最大开始时间,要求每一组的效率的正数,求最大效率和.N<1000 思路: 把包含至少一个其他的分到A组:否则到B组. A组的要么单 ...
- bzoj2216: [Poi2011]Lightning Conductor(分治决策单调性优化)
每个pi要求 这个只需要正反DP(?)一次就行了,可以发现这个是有决策单调性的,用分治优化 #include<iostream> #include<cstring> #incl ...
- CF321E Ciel and Gondolas 【决策单调性dp】
题目链接 CF321E 题解 题意:将\(n\)个人分成\(K\)段,每段的人两两之间产生代价,求最小代价和 容易设\(f[k][i]\)表示前\(i\)个人分成\(k\)段的最小代价和 设\(val ...
- BZOJ2739 最远点(分治 + 决策单调性)
2739: 最远点 Time Limit: 20 Sec Memory Limit: 256 MB Description 给你一个N个点的凸多边形,求离每一个点最远的点. Input 本题有多组数据 ...
- BZOJ2216 [Poi2011]Lightning Conductor 【决策单调性dp】
题目链接 BZOJ2216 题解 学过高中数学都应知道,我们要求\(p\)的极值,参变分离为 \[h_j + sqrt{|i - j|} - h_i \le p\] 实际上就是求\(h_j + sqr ...
随机推荐
- 【算法day6】哈希表、有序表、链表(反转单链表)
哈希表的简单介绍 1)哈希表在使用层面上可以理解为一种集合结构 2)如果只有key,没有伴随数据value,可以使用HashSet结构(C++中叫UnOrderedSet) 3)如果既有key,又有伴 ...
- 运行Study.Trade模块的Web.Unified.Host
1.把Web.Host的项目设置为启动项目 上一篇文章报错,因为npm功能没有安装,导致Web.Unified.Host的wwwroot下没有libs目录. 2.默认是在IIS Express中承载 ...
- 【Azure 应用服务】Function App / App Service 连接 Blob 报错
问题描述 因 Blob 启用了防火墙功能,但是当把App Service 或 Function App的出站IP地址都加入到Blob的白名单中,为什么访问还是403错误呢? 问题解答 Azure St ...
- 【Azure Developer】Python 获取 Azure 中订阅(subscription)信息,包含ID, Name等
问题描述 在Azure AD中注册一个Applicaiton后,对其进行授权,能够查看所有订阅的ReadOnly权限,然后,是否可以同通过Python代码,在完成Authorization后(使用Cl ...
- EFCore之命令行工具
介绍 EFCore工具可帮助完成设计数据库时候的开发任务,主要用于通过对数据库架构进行反向工程来管理迁移和搭建DbContext和实体类型.EFCore .NET命令行工具是对跨平台.NET Core ...
- 协程的async使用
async与launch一样都是开启一个协程,但是async会返回一个Deferred对象,该Deferred也是一个job async函数类似于 launch函数.它启动了一个单独的协程,这是一个轻 ...
- [Python] 超简单的 超星学习通自动签到
目录 概述 代码 其他的 文件编码问题 windows 和 linux下换行符不同的问题 概述 今天两节课的签到都错过了 /(ㄒoㄒ)/~~ 所以决定花点时间做一个自动签到的工具 经过观察发现超星的结 ...
- 推进行业生态发展完善,中国信通院第八批RPA评测工作正式启动
随着人工智能.云计算.大数据等新兴数字技术的高速发展,数字劳动力应用实践步伐加快,以数字生产力.数字创造力为基础的数字经济占比逐年上升. 近年来,机器人流程自动化(Robotic Process Au ...
- ansible-vault 教程
基本使用 在编写playbook时,可能会涉及到一些敏感的数据,比如密码,当这些敏感数据以明文的方式存储在playbook中时,可能是不能被接受的,那么我们该怎么办呢?ansible官方已经考虑到了这 ...
- react build 后,打包后自动将index.html copy 404.html - create-react-app 创建的项目
起因:build上传gitee,启用路由需要404.html自动跳转 当前环境 create-react-app 搭建的架子 解决方案 由于默认的时候把build.js打包,无法查看,只好eject ...