Codeforces 868F Yet Another Minimization Problem 决策单调性 (看题解)
Yet Another Minimization Problem
dp方程我们很容易能得出, f[ i ] = min(g[ j ] + w( j + 1, i ))。 然后感觉就根本不能优化。
然后就滚去学决策单调啦。 然后就是个裸题, 分治一下就好啦,
注意用分治找决策点需要的条件是我们找出被决策点不能作为当前转移的决策点使用。
如果w( j + 1, i )能很方便求出就能用单调栈维护, 并且找出的被决策点能当作当前转移的决策点使用。
我怎么感觉用bfs应该跑莫队的时候应该比dfs快啊, 但是居然还是dfs跑得快, 莫名其妙。。
#include<bits/stdc++.h> #define LL long long #define fi first #define se second #define mk make_pair #define PLL pair<LL, LL> #define PLI pair<LL, int> #define PII pair<int, int> #define SZ(x) ((int)x.size()) #define ull unsigned long longusing namespace std;const int N = 1e5 + 7; const int inf = 0x3f3f3f3f; const LL INF = 0x3f3f3f3f3f3f3f3f; const int mod = 1e9 + 7; const double eps = 1e-8; const double PI = acos(-1);int n, k, a[N], cnt[N]; LL f[N], g[N];int pl = 1, pr = 0; LL val;inline LL w(int i, int j) {while(pl > i) pl--, val += cnt[a[pl]], cnt[a[pl]]++;while(pr < j) pr++, val += cnt[a[pr]], cnt[a[pr]]++;while(pl < i) cnt[a[pl]]--, val -= cnt[a[pl]], pl++;while(pr > j) cnt[a[pr]]--, val -= cnt[a[pr]], pr--;return val; }void solve(int L, int R, int l, int r) {if(l > r) return;int mid = l + r >> 1, p = L;for(int i = L; i <= min(R, mid); i++)if(g[i] + w(i + 1, mid) < f[mid])f[mid] = g[i] + w(i + 1, mid), p = i;solve(L, p, l, mid - 1);solve(p, R, mid + 1, r); }int main() {scanf("%d%d", &n, &k);for(int i = 1; i <= n; i++) {scanf("%d", &a[i]);f[i] = f[i - 1] + cnt[a[i]];cnt[a[i]]++;}for(int i = 2; i <= k; i++) {memset(cnt, 0, sizeof(cnt));memcpy(g, f, sizeof(g));memset(f, INF, sizeof(f));solve(1, n, 1, n);}printf("%lld\n", f[n]);return 0; }/* */
转载于:https://www.cnblogs.com/CJLHY/p/10507436.html
Codeforces 868F Yet Another Minimization Problem 决策单调性 (看题解)相关推荐
- CodeForces - 868F Yet Another Minimization Problem
Description 给定一个长度为 \(n(n\le 10^5)\) 的数列,第 \(i\) 个数是 \(a_i\in[1,n]\) ,要求将其划分为 \(k(2\le k\le min(20,n ...
- 【CF868F】Yet Another Minimization Problem (决策单调性优化dp+分治)
description 点击查看题目 solution code 设dpi,jdp_{i,j}dpi,j:把前iii个数划分jjj段的最小花费,wi,jw_{i,j}wi,j:[i,j][i,j] ...
- Codeforces Round #190 (Div. 1): E. Ciel and Gondolas(决策单调性DP+wqs二分)
E. Ciel and Gondolas 题意: bzoj5311:https://www.lydsy.com/JudgeOnline/problem.php?id=5311 同一道题目,但是bzoj ...
- CF868F Yet Another Minimization Problem
CF868F Yet Another Minimization Problem 题目描述 Solution 一开始可以很容易地写出一个dpdpdp式子: 设fi,jf_{i,j}fi,j表示前iii ...
- [CodeForces1603D] Artistic Partition(四边形不等式 + 决策单调性优化dp + 分治 + 线性筛 + 数论分块)
problem codeforces 对于给定的正整数 l≤l\leql≤,定义 c(l,r)c(l,r)c(l,r) 为满足下列条件的正整数对 (i,j)(i,j)(i,j) 的数量: l≤i≤j≤ ...
- 2020-2021 ACM-ICPC, Asia Seoul Regional Contest L. Two Buildings (决策单调性 分治)
linkkkkkk 题意: 给定长度为nnn的数组ccc,求max((j−i)∗(ci+cj))max((j-i)*(c_i+c_j))max((j−i)∗(ci+cj)) 思路: 将式子转化为m ...
- CF834D. The Bakery(线段树优化dp 决策单调性优化dp)
linkkkkk 题意: 将一个长度为 n 的序列分为 m段,使得总价值最大. 一段区间的价值表示为区间内不同数字的个数. n≤35000,m≤50 思路: 考虑朴素的dpdpdp方程:dp[i][j ...
- Luogu P5244 [USACO2019Feb Platinum] Mowing Mischief (动态规划、决策单调性)
题目链接 https://www.luogu.com.cn/problem/P5244 题解 首先求出 LIS. 根据 LIS 的值我们可以对整个点集分层,每一层内进行 DP. 将每层的点按 \(x_ ...
- 【BZOJ5311/CF321E】贞鱼/Ciel and Gondolas(动态规划,凸优化,决策单调性)
[BZOJ5311/CF321E]贞鱼/Ciel and Gondolas(动态规划,凸优化,决策单调性) 题面 BZOJ CF 洛谷 辣鸡BZOJ卡常数!!!!!! 辣鸡BZOJ卡常数!!!!!! ...
最新文章
- C语言中“数组名”和“数组名”
- hihoCoder #1872 : Pythagorean triple
- 使用ABAP(ADBC)和Java(JDBC)连接SAP HANA数据库 1
- vscode浏览器打开html
- 408计算机先学哪个,408计算机统考各科难度分析
- Spark之RDD实战篇3
- C语言易混淆关键词详解-const, static, extern, typedef, 声明
- 一步一步教你使用AgileEAS.NET基础类库进行应用开发-WinForm应用篇-在UI中应用DataUIMapper组件...
- 木兰宽松许可证(MulanPSL v2)解析
- server-sent events
- 搜索引擎 —海量数据搜索
- python自动化测试工程师面试题(转载师傅:上海悠悠)
- 超详细的Django面试题
- 问题:office应用(word、ppt、excel、oneNote) 您的组织策略阻止我们为您完成此操作 解决办法
- 怎么清楚计算机硬盘搜索记录,win7系统怎么清除搜索记录_windows7删除计算机搜索记录的方法...
- 一文简要了解词义消歧与实体消歧
- html5在线俄罗斯方块,html5网页版俄罗斯方块小游戏代码
- 北上广深买的房,程序员月薪得多少?
- 保千里打令V10S上海体验秀 智能手机迎来全景时代
- [飞控]如何学习无人机-入门篇
热门文章
- 【HIMI转载推荐之三】新手教程之如何向APP STORE提交应用
- videoview 播放视频
- DotNet_Performance_Tuning_ANTS_Performance_Profiler
- #我要10000+# 计划启动啦!让文章拥有更多曝光~
- LeetCode 题解汇总
- ios 获得通讯录中联系人的所有属性 亲测,可行 兼容io6 和 ios 7
- Linux下MySQL C API简单示例
- 摘要:ASP.NET的路由
- delphi 程序运行时移动控件
- happy 99 (转载)