动态规划
ShɑΙteж
think twice,code once
展开
-
CSP201909-5 城市规划
树形背包DP,考虑每条边对答案的贡献,一条边v连接的子树选了w个点,那么这条边对答案的贡献就是k*(k-w)*v (因为最终要选k个点)#include<bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<=(b);i++)#define per(i,a,b) for(int i=(a);i>=(b);i--)#define LL long longusing namespace std;const int N=5e4+1原创 2021-03-23 21:49:42 · 311 阅读 · 0 评论 -
CCF 202012-4 食材运输
CCF 202012-4 食材运输预处理出cost[i][j]表示第i 个食材从第j个点出发运送完所需的时间,t[i][S]表示从i点出发送完S 集合中出现的食材所需的最大时间,f[i][S]表示选了i个点,已送完了S种食材所需的最小时间,最后答案就是min{f[i][(1<<k)-1]} (i<=m)#include<bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<=(b);i++)#define per(原创 2021-03-16 06:55:03 · 1441 阅读 · 2 评论 -
[POJ 3017] 单调队列优化DP
[POJ 3017]Problem给定一个长度为N的序列A,要求把该序列分成若干段,在满足每段中所有数值和不超过M的前提下,让每段中所有数的最大值之和最小。 N<=10^5,M<=10^11,0<=Ai<=10^6Solution很容易写出状态转移方程 F[i]= min { F[j] + max(Ak) } (j+1<=k<=i) ...原创 2019-02-24 21:28:29 · 252 阅读 · 0 评论 -
[ZROI160]路径计数 DP+广义容斥
50pts f[s][t][d][x]表示从s点出发走到x路径长度为d且不经过s和t的方案数#include<bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<=(b);i++)using namespace std;const int N=101;struct node{int y,n;}e[N*N];...原创 2019-03-06 16:57:41 · 195 阅读 · 0 评论 -
[ZROI159]取石子游戏 动态规划
70pts 就是求在一段序列中取出若干个数(不能全取完且取出的个数必须是d的倍数),使剩下的xor和为0的方案数 f[i][k][w]表示现在到了第i个数,取出的数的个数%d==k,没取出来的数xor和为0时方案数 答案就是f[n][0][0]-(n%d==0) (不能全取完) 对于另外20%的数据,发现所有数的本质不同的xor和最多有2^5个,预处理出来本质不同的xor和,在...原创 2019-03-06 20:05:15 · 1134 阅读 · 0 评论 -
[SDOI2009]HH去散步 动态规划+矩阵乘法优化
[SDOI2009]就是求从S到T有多少条长度为t的路径,满足当前走过的路不能是上一次走过的40pts无脑爆搜?#include<bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<=(b);i++)using namespace std;const int mod=45989;const int N=1e5;...原创 2019-03-04 20:13:52 · 230 阅读 · 0 评论 -
[JSOI2016]病毒感染 动态规划
[JSOI2016]题目 g[i][j]表示 i->j->i 过程中i~j村庄最少消失的人数 f[i]表示当前在i村庄,i及i之前的村庄都被治愈的总共最少消失人数#include<bits/stdc++.h>#define rep(i,a,b) for(ll i=(a);i<=(b);i++)#define ll long longusing nam...原创 2019-03-19 19:52:24 · 423 阅读 · 0 评论 -
[BZOJ3036]绿豆蛙的归宿 期望DP
[BZOJ3036]f[x]表示从x到n的期望路径长度,倒着按Topsort转移即可 正序转移的话每条边的概率不对,所以要倒序#include<bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<=(b);i++)using namespace std;const int N=1e6;struct node{int ...原创 2019-03-19 20:13:39 · 154 阅读 · 0 评论 -
[51nod1812]树的双直径 树形DP
[51nod1812]f[x]表示x子树内最长链的长度,h[x]表示除去x即其子树的最长链长度 注意栈空间#include<bits/stdc++.h>#define rep(i,a,b) for(ll i=(a);i<=(b);i++)#define ll __int128using namespace std;const ll inf=1e9;cons...原创 2019-03-18 14:54:41 · 338 阅读 · 0 评论 -
[JLOI2016]侦察守卫 树形DP
[JLOI2016]菜的真实,不会写 f[x][j]表示从x开始向下j层(包括x)以下都被覆盖的最小花费 g[x][j]表示x及x的子树都覆盖完了,x向上还能覆盖j层的最小花费 如果选x:g[x][j]=g[x][j]+f[y][j] 如果选y:g[x][j]=g[y][j+1]+f[x][j+1] f[x][j]=\sum f[y][j-1]#include<bits/s...原创 2019-03-18 20:13:16 · 181 阅读 · 0 评论 -
[HAOI2018]奇怪的背包
[HAOI2018]设当前选取的物品序列为{V1,V2,V3,...,Vn} 则可以凑出W的条件是gcd{V1,V2,V3,...,Vn,P} | W 这样就可以DP了 设f[ i ][ j ]表示考虑了前 i 个物品,当前选取的物品与P的gcd为 j 的方案数 离散化后f[ i ][ j ]可转化成当前选取的物品与P的gcd是P的第 j 个因子的方案数Code#includ...原创 2019-02-15 21:38:05 · 233 阅读 · 0 评论 -
动态规划EX
树形DP 给出一棵n个节点的树,每个节点上有点权a_i,求最长的树上路径,满足条件:路径上经过节点(包括两个端点)点权的gcd和不等于1。 n <=2e5,1<=a_i<=2e5 不互素就ok,不用考虑具体的gcd值,还不用考虑重复计算。 对于每个节点u,维护f_{u,v}表示u往下挂出的点权都能被v整除的最长链。 v只取整除a_u的质数,个数很少,很容易...原创 2019-01-16 20:52:08 · 469 阅读 · 0 评论 -
概率DP&期望杂题
1.http://zhengruioi.com/problem/450/*f[i][j]:前i个人,有j个人正常出局的概率f[i][j]+=f[i-1][j]*P1+f[i-1][j-1]*p2; 留下来/被日死 正常出局 p 别人出局后自己被日死的概率 P2=(1-p)^(j-1);P1=(1-P1)f[i][k]*P2 前K个过后都没有被日死最...原创 2018-10-28 21:08:24 · 207 阅读 · 0 评论 -
NOIP2017 Day2 T2 宝藏
1)状压DP写法#include<bits/stdc++.h>using namespace std;const int INF=1e7;const int N=13;int sval[1<<N][1<<N];int pval[N][1<<N];int f[N][1<<N];int ans=1e7;int g[N][...原创 2018-05-02 11:57:11 · 232 阅读 · 2 评论 -
DP学习记录
记录学习DP过程中的思想提升与总结最优决策表=阶段+状态,一般使用数组表示,如f[i],f[i][j]。当i的状态只与i-1的状态有关,可用滚动数组优化,i&1 ,(i-1)&1;关于0/1背包为什么逆序枚举:f [ 0 ~ v[i]-1 ] 处于第 i-1 个状态 ( 还没有第 i 个物品更新 )。f [ v[i] ~ m ] 处于第 i ...原创 2018-04-24 17:38:19 · 201 阅读 · 0 评论 -
[CF1097G Vladislav and a Great Legend ]树形DP+计数
[CF1097G Vladislav and a Great Legend ]Code#include<bits/stdc++.h>#define rep(i,a,b) for(ll i=(a);i<=(b);i++)#define per(i,a,b) for(ll i=(a);i>=(b);i--)#define ll long longusing n...原创 2019-01-17 18:36:52 · 244 阅读 · 0 评论 -
[CF1061C Multiplicity] DP
[CF1061C Multiplicity]Code#include<bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<=(b);i++)#define per(i,a,b) for(int i=(a);i>=(b);i--)using namespace std;const int mod=1e9+7;c...原创 2019-01-17 19:19:08 · 220 阅读 · 0 评论 -
[CF1096D] DP
[CF1096D Easy Problem]Code#include<bits/stdc++.h>#define rep(i,a,b) for(ll i=(a);i<=(b);i++)#define ll long longusing namespace std;const ll N=1e5+100;ll f[N][10],a[N],n;char ch[N]...原创 2019-01-17 19:23:04 · 348 阅读 · 0 评论 -
[BZOJ3864] Hero meet devil 状压DP(DP套DP)
[BZOJ3864]Code#include<bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<=(b);i++)using namespace std;const int mod=1e9+7;const int N=1001;int f[N][(1<<15)+10],sta[(1<&l...原创 2019-01-17 21:04:36 · 246 阅读 · 0 评论 -
[CF1101D GCD Counting] 树形DP
[GCD Counting]Code#include<bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<=(b);i++)using namespace std;const int N=5e5;struct node{int y,n;}e[N];int lin[N],f[200100][20],len=1,val...原创 2019-01-16 19:07:56 · 266 阅读 · 0 评论 -
[CF1039D You Are Given a Tree]树形DP
[CF1039D You Are Given a Tree]Code#include<bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<=(b);i++)using namespace std;const int N=5e5;struct node{int y,n;}e[N];int lin[N],ans[N],...原创 2019-01-16 20:43:16 · 412 阅读 · 0 评论 -
DP杂题
1.http://codeforces.com/problemset/problem/946/D/**************************************************** 刚开始写的是贪心,WA了正解是DPval[i][j]表示第i层删了j个最小花费f[i][j]表示到了第i层,删了j个,最小花费f[i][j]=min(f[i][j],f[i-1]...原创 2018-10-31 21:34:19 · 174 阅读 · 0 评论