CF 868 F. Yet Another Minimization Problem】的更多相关文章

F. Yet Another Minimization Problem http://codeforces.com/contest/868/problem/F 题意: 给定一个长度为n的序列.你需要将它分为m段,每一段的代价为这一段内相同的数的对数,最小化代价总和. n<=100000,m<=20. 分析: f[k][j]=min{f[k-1][j]+cost(k,j,i)}; cost发现不能快速的算出.于是不能用类似单调队列+二分的方法来做了. 考虑分治,solve(Head,Tail,L…
目录 题目链接 题解 代码 题目链接 CF868F. Yet Another Minimization Problem 题解 \(f_{i,j}=\min\limits_{k=1}^{i}\{f_{k,j-1}+w_{k,i}\}\) \(w_{l,r}\)为区间\([l,r]\)的花费,1D1D的经典形式 发现这个这是个具有决策单调性的转移 单无法快速转移,我们考虑分治 对于当前分治区间\([l,r]\) ,它的最优决策区间在\([L,R]\)之间. 对于\([l,r]\)的中点\(mid\)…
Yet Another Minimization Problem dp方程我们很容易能得出, f[ i ] = min(g[ j ] + w( j + 1, i )). 然后感觉就根本不能优化. 然后就滚去学决策单调啦. 然后就是个裸题, 分治一下就好啦, 注意用分治找决策点需要的条件是我们找出被决策点不能作为当前转移的决策点使用. 如果w( j + 1, i )能很方便求出就能用单调栈维护, 并且找出的被决策点能当作当前转移的决策点使用. 我怎么感觉用bfs应该跑莫队的时候应该比dfs快啊,…
题目链接  Yet Another Minimization Problem 题意  给定一个序列,现在要把这个序列分成k个连续的连续子序列.求每个连续子序列价值和的最小值. 设$f[i][j]$为前$i$个数分成$j$段的最优解 不难得出状态转移方程$f[i][j] = min(f[k][j - 1], calc(j + i, i))$ 该DP具有决策单调性 即若$f[i][j]$是从$f[x][j - 1]$转移到的,$f[i+1][j]$是从$f[y][j - 1]$转移到的,那么一定有$…
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…
题目链接 CF 633 F. The Chocolate Spree 题解 维护子数答案 子数直径 子数最远点 单子数最长直径 (最长的 最远点+一条链) 讨论转移 代码 #include<vector> #include<cstdio> #include<algorithm> #define gc getchar() #define pc putchar #define int long long inline int read() { int x = 0,f = 1…
题目链接:http://codeforces.com/contest/474/problem/F 一个数组,每一次询问一个区间中有多少个数字可以整除其他所有区间内的数字. 能够整除其他所有数字的数一定是这些数字的gcd,所以可以用一个线段树来查询区间gcd. 接着需要统计区间内这个数字的出现个数,在读取数组时,顺便保存一个pair<int,int>键为数字,val为位置的数组,再sort一下,统计区间内某个数字出现次数,直接upper_bound-lower_bound即可. #include…
abstract: V const & a 加速 F. Mirror 题意 链接 问题: 有n个人在y=0的平面上(及xoz平面).z=0平面上有一面镜子(边平行于坐标轴).z=a平面上有q个点(保证a大于所有人的z坐标). 所有人面朝镜子,且在镜子和q个点之间(即每个人的z坐标保证0<z<a). 问对于某个点,让所有人能够通过镜子看到那个点的镜子的最小面积. 题解 三维几何+镜像+凸包 首先考虑镜面,我们可以通过(初中科学的)镜面反射原理,关于z=0做出z=a的对称平面z=-a.问题…
题目链接:[http://codeforces.com/contest/1003/problem/F] 题意:给出一个n字符串,这些字符串按顺序组成一个文本,字符串之间用空格隔开,文本的大小是字母+空格的个数.在这个文本中找k(k>=2)个区间,使得这k个区间完全相同,字符串不能分开,然后把每段的字符串变成单个的字符,并去掉中间的空格.可能有多种方案,求文本的最小长度.[表达能力有限,望理解,具体可以看题目] You are given a text consisting of nn space…
F. The Shortest Statement http://codeforces.com/contest/1051/problem/F 题意: n个点,m条边的无向图,每次询问两点之间的最短路.(m-n<=20) 分析: dijkstra. 如果是一棵树,那么可以直接通过,dis[u]+dis[v]-dis[lca]*2来求.现在如果建出一棵树,那么非树边只有小于等于21条. 只经过树边的路径用上面的方式求出,考虑经过非树边的路径. 经过非树边(至少一条),那么一定经过了这条边的顶点,所以…