题意 给定一个序列 \(\{a_1, a_2, \cdots, a_n\}\),要把它分成恰好 \(k\) 个连续子序列. 每个连续子序列的费用是其中相同元素的对数,求所有划分中的费用之和的最小值. \(2 \le n \le 10^5, 2 \le k \le \min(n, 20), 1 \le a_i \le n\) 题解 \(k\) 比较小,可以先考虑一个暴力 \(dp\) . 令 \(dp_{k, i}\) 为前 \(i\) 个数划分成 \(k\) 段所需要的最小花费. 那么转移如下…
Yet Another Minimization Problem dp方程我们很容易能得出, f[ i ] = min(g[ j ] + w( j + 1, i )). 然后感觉就根本不能优化. 然后就滚去学决策单调啦. 然后就是个裸题, 分治一下就好啦, 注意用分治找决策点需要的条件是我们找出被决策点不能作为当前转移的决策点使用. 如果w( j + 1, i )能很方便求出就能用单调栈维护, 并且找出的被决策点能当作当前转移的决策点使用. 我怎么感觉用bfs应该跑莫队的时候应该比dfs快啊,…
目录 题目链接 题解 代码 题目链接 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\)…
Description 给出一个长度为 \(n\) 的序列,你需要将它分为 \(k\) 段,使得每一段的价值和最小,每一段的价值是这一段内相同的数的个数 题面 Solution 容易想到设 \(f[i][j]\) 表示前 \(i\) 个数分成 \(j\) 段的最小代价 \(f[i][j]=min(f[k][j-1]+w(k+1,i))\) 这个\(DP\)有决策单调性,可以分治优化 设 \(solve(l,r,L,R)\) 表示用区间 \([L,R]\) 内的决策去更新 \([l,r]\) 的函…
LINK 题目大意 给你一个序列分成k段 每一段的代价是满足\((a_i=a_j)\)的无序数对\((i,j)\)的个数 求最小的代价 思路 首先有一个暴力dp的思路是\(dp_{i,k}=min(dp_{j,k}+calc(j+1,i))\) 然后看看怎么优化 证明一下这个DP的决策单调性: trz说可以冥想一下是对的就可以 所以我就不证了 (其实就是决策点向左移动一定不会更优) 然后就分治记录当前的处理区间和决策区间就可以啦 //Author: dream_maker #include<bi…
题目链接  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]$转移到的,那么一定有$…
题意 题目链接 给定一个长度为\(n\)的序列.你需要将它分为\(m\)段,每一段的代价为这一段内相同的数的对数,最小化代价总和. \(n<=10^5,m<=20\) Sol 看完题解之后的感受: 首先列出裸的dp方程,\(f[i][j]\)表示前\(i\)个位置,切了\(j\)次,转移的时候枚举上一次且在了哪儿 \(f[i][j] = max(f[k][j - 1] + w(k, i))\) \(w(k, i)\)表示\([k, i]\)内相同的数的对数.. 然后sb的我以为拿个单调队列维护…
题意: 给定一个序列,你要将其分为k段,总的代价为每段的权值之和,求最小代价. 定义一段序列的权值为$\sum_{i = 1}^{n}{\binom{cnt_{i}}{2}}$,其中$cnt_{i}$表示当前这段序列中数字大小为i的数的个数. 题解: 先考虑暴力DP, f[i][j]表示DP到i位,分为j段的最小代价. 则$f[i][j] = min(f[l - 1][j] + sum[l][i])$,其中sum[l][i]表示区间[l, i]分成一段的代价. 然后可以发现,这是具有决策单调性的…
洛谷题目传送门 貌似做所有的DP题都要先搞出暴力式子,再往正解上靠... 设\(f_{i,j}\)为前\(i\)个数分\(j\)段的最小花费,\(w_{l,r}\)为\([l,r]\)全在一段的费用. \[f_{i,j}=\min\limits_{k=1}^{i}\{f_{k,j-1}+w_{k,i}\}\] 显然\(j\)这一维可以滚掉,于是变成\(g_i=\min\limits_{k=1}^{i}\{f_k+w_{k,i}\}\)做\(m\)遍(题目中的\(k\)) 这又是一个决策单调性优化…
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1563 分析: 首先可得朴素的方程:f[i]=min{f[j]+|s[j]-j-s[i]-i-L+1|^P} j=0..i-1 这种1D/1D的动态规划要优化肯定只有决策单调性优化,打个表发现的确如此,然后就愉快的O(nlogn)了…