DP优化
Master.Yi
学习他人,提升自己;
提升自己,帮助他人。
展开
-
20200810 T2 Dispatch Money【区间逆序对,分治套分治解决决策单调性】
题目描述给一个长度为 nnn 的排列 aia_iai,把它划分为若干段,每划分一段有 XXX 的代价,划分完后段内需要排序,代价为区间逆序对个数。求最小总代价。n≤300000,1≤X≤109n\le 300000,1\le X\le 10^9n≤300000,1≤X≤109时限 5s.题目分析暴力 O(n2)O(n^2)O(n2) DP:fi=fj+inversion_pair(j+1,i)f_i=f_j+inversion\_pair(j+1,i)fi=fj+inversion_pair原创 2020-08-10 19:12:28 · 452 阅读 · 0 评论 -
20200519 hz【对称中心,前缀和优化DP,LCT最小生成树(边权k±x)】
T1:小B的棋盘K个棋子可以不用完,对称指旋转180°后完全重合。而前k+1k+1k+1与后k+1k+1k+1个点中一定有一对点匹配,这样就可以确定对称中心,枚举后check即可,O(k2n)O(k^2n)O(k2n)Code:#include<bits/stdc++.h>#define maxn 100005using namespace std;int n,K;struct node{ int x,y; bool operator < (const node &原创 2020-05-19 18:25:00 · 241 阅读 · 0 评论 -
模拟赛20200229(ay)【max函数分割点、单调队列优化,动态点分治+线段树维护修改边权】
T1:队列题解:Code:#include<bits/stdc++.h>#define maxn 5005using namespace std;int n,w[maxn],f[maxn][maxn],s[maxn],t[maxn],q[maxn][maxn],g;int main(){ freopen("queue.in","r",stdin); freop...原创 2020-03-01 23:15:31 · 200 阅读 · 0 评论 -
模拟赛20200220【概率DP(概率流失),容斥,贪心+斜率优化】
T1:飞行棋题解:首先是一个比较好想的DP:因为游戏只要第一个人获胜就结束了,所以可以大胆猜测游戏在一定轮数后还在继续的概率会小到可以忽略。Code:#include<bits/stdc++.h>using namespace std;const int N = 160, M = 23;int n,m,a[N],p[M];const double P = 1...原创 2020-02-25 11:49:06 · 202 阅读 · 0 评论 -
模拟赛20200219【染色覆盖(DP+卡常NTT),k进制lowbit,最长连续段限制环染色(Burnside)】
T1:染色问题对摆在玩家面前的一排初始无色的格子进行染色,每次染色可以将连续一段格子染成一种之前没有出现过的颜色,要求在所有操作后每一个格子都被染了至少一次色(重复染色会使前一次染的颜色被覆盖)给出长度nnn和染色次数mmm,求最终可能的颜色序列种数。n,m≤106n,m\le10^6n,m≤106题解:上述的倍增FFT的具体实现方式是递归[l,r][l,r][l,r],如果r−l...原创 2020-02-25 11:06:26 · 315 阅读 · 0 评论 -
NOI模拟赛20200102 T3 计算【线段树优化DP】
题目描述:n,m≤5∗105n,m\le5*10^5n,m≤5∗105题目分析:把区间按左端点排序,点排序,设f[i][j]f[i][j]f[i][j]表示考虑到第iii个区间放或不放,第jjj个点时前j−1j-1j−1个点已经被覆盖的总方案数。记第iii个区间为[l,r][l,r][l,r],那么若l≤jl\le jl≤j,这个区间不选,f[i+1][j]+=f[i][j]f[i+...原创 2020-01-04 08:19:18 · 158 阅读 · 0 评论 -
BZOJ4609: [Wf2016]Branch Assignment【WQS二分+决策单调性DP】
题目描述:要完成一个由s个子项目组成的项目,给b(b>=s)个部门分配,从而把b个部门分成s个组。分组完成后,每一组的任意两个点之间都要传递信息。假设在(i,j)两个点间传送信息,要先把信息加密,然后快递员从i出发到总部,再加密,再到j点。出于安全原因,每次只能携带一条消息。现在给出了道路网络、各个部门和总部的位置,请输出快递员要走的最小总距离。输入格式第一行包含四个整数n,b,s,r...原创 2019-10-09 16:22:20 · 193 阅读 · 0 评论 -
BZOJ 2999 inint【数DP优化】(Ender的模拟赛)
题目描述从起点1开始,每次选择当前数的任意一位上加上去,问得到n的最小步数以及方案数。多组数据。例如,从1开始得到100,有很多方法,其中有下面两种方式:A. 1-2-4-8-16-17-18-19-20-22-24-28-36-39-48-56-62-68-76-83-91-100B. 1-2-4-8-16-17-24-28-36-39-48-56-62-68-76-83-91-100...原创 2019-07-26 21:42:12 · 181 阅读 · 0 评论 -
Codeforces1129D. Isolation【分块优化DP】
题目描述:给出长度为n(1≤n≤105)n(1≤n≤10^5)n(1≤n≤105)的数组a(ai≤n)a(a_i≤n)a(ai≤n)。给出1≤k≤n1≤k≤n1≤k≤n,求把这个序列分成若干块的方案,使得对于每个区间,只出现一次的数字不超过k kk个。题目分析:O(n2)O(n^2)O(n2)的DP很显然f[i]=∑f[j−1],j满足[j,i]中只出现一次的数≤kf[i]=\sum f[...原创 2019-05-16 20:14:56 · 226 阅读 · 0 评论 -
Codeforces Round #541 div2 G Most Dangerous Shark【多米诺骨牌单调栈】
题目描述:从左到右有n(n≤107)n(n\le10^7)n(n≤107)个骨牌,每个高度hih_ihi,手动推倒它的代价是cic_ici,相邻两个骨牌距离为1,骨牌可以向左或向右倒。当骨牌被推倒时,它会朝对应的方向推倒与它距离<hi<h_i<hi的骨牌,求推倒所有骨牌的最小代价。题目分析:虽然一个骨牌即可以向左也可以向右倒,但还是可以DP。如果设f...原创 2019-05-15 20:24:22 · 190 阅读 · 0 评论 -
Newnode‘s NOI 模拟赛 第二题 【DP优化(决策单调性)】
Mogician_Evian的题解然而考试的时候我的n3暴力跑过了。。 (开了O2的 )O(n3) Code:#include<cstdio>#include<cstring>#include<algorithm>#define maxn 2005using namespace std;const int inf = 0x3f3f3f3f;in...原创 2019-03-27 18:27:45 · 173 阅读 · 0 评论 -
BZOJ 3594: [Scoi2014]方伯伯的玉米田 【DP优化】
题目传送门题目分析:如果我们用f[i][j]表示前i个数用了j次操作得到的以i为右端点的最长不下降序列长度,枚举前面的决策点转移。你会发现没办法转移,因为你不知道决策点和i的大小关系。于是神奇的事情发生了。你会发现,一次操作的区间一定是形如[i,n][i,n][i,n]的!如果你拔高了区间[i,j][i,j][i,j],那么显然拔高[i,n][i,n][i,n]不会更劣。那么对于p&...原创 2019-03-28 22:40:46 · 122 阅读 · 0 评论 -
BZOJ 1109: [POI2007]堆积木Klo 【DP优化】
题目传送门题目分析:DP,设f[i]f[i]f[i]表示答案序列以第i个点结尾的最长长度,a[i]a[i]a[i]为第i个点的数。那么当i≥a[i]i\ge a[i]i≥a[i]时,有f[i]=f[j]+1f[i]=f[j]+1f[i]=f[j]+1,这个转移需要满足a[i]≥a[j]且i−j>=a[i]−a[j]a[i]\ge a[j]且i-j>=a[i]-a[...原创 2019-03-29 19:12:32 · 134 阅读 · 0 评论