dp
文章平均质量分 78
会飞的小蛇
这个作者很懒,什么都没留下…
展开
-
(期望dp)洛谷P1654OSU!
洛谷P1654OSU!思路:利用期望的性质:E(X+Y)=E(X)+E(Y)E(X+Y)=E(X)+E(Y)E(X+Y)=E(X)+E(Y)E(C)=C,C为常数E(C)=C,C为常数E(C)=C,C为常数设连续iii个数为111,贡献的期望为E(i3)E(i^3)E(i3)。可得:E(i)=(E(i−1)+1)×piE(i)=(E(i-1)+1)\times p_iE(i)=(E(i−1)+1)×piE(i2)=(E((i−1)2)+2E(i−1)+1)×piE(i^2)=(E((i-1)原创 2020-11-26 00:14:27 · 232 阅读 · 0 评论 -
(dp)CF1225E. Rock Is Push
CF1225E. Rock Is Push题意:你在一个n×mn\times mn×m矩阵中的(1,1)(1,1)(1,1)点,要到达(n,m)(n,m)(n,m)点,你只能向右或者向下走。矩阵中有些格子有石头,你走到一个有石头的点可以按照你的移动方向推动石头,如果那个点上也有一个石头,它就会被按相同方向推的更远,以此类推。但是石头不能被推出矩阵外。问有多少种到达方案,对109+710^9+7109+7取模。思路:非常巧妙的一道dp题。不看题解真的想不到。如果没有障碍物,或者障碍物不能移动,那么是原创 2020-09-07 20:52:00 · 225 阅读 · 0 评论 -
(DAGdp)洛谷P1137旅行计划
洛谷P1137旅行计划思路:题目说只能走到东边的城市,又保证xxx再yyy的西面,虽然说是双向道路,但是就可以直接建(x,y)(x,y)(x,y)的边。可以得到dp[v]=max(dp[v],dp[u]+1)dp[v]=\max(dp[v],dp[u]+1)dp[v]=max(dp[v],dp[u]+1),那么怎么解决后效性呢?就是用拓扑排序,因为拓扑排序出来的点就可以保证一个点不会再有入度,这样就不会受到别的点的影响,这样就没有了后效性。代码:#include<bits/stdc++.h原创 2020-09-04 00:19:26 · 295 阅读 · 0 评论 -
(dp)洛谷P1108低价购买
洛谷P1108低价购买思路:看起来是最长下降子序列,但要考虑方案数,这里卡了好久。方案数也像一个dp,由dp的状态来决定方案的状态。代码:#include<bits/stdc++.h>#define pii pair<int,int>#define ll long long#define cl(x,y) memset(x,y,sizeof(x))#defin...原创 2020-02-01 11:23:48 · 172 阅读 · 0 评论 -
(dp)洛谷P1095守望者的逃离
洛谷P1095守望者的逃离思路:dp[i]表示在第i秒最远走多远,跑步和闪烁分开进行。代码:#include<bits/stdc++.h>#define pii pair<int,int>#define ll long long#define cl(x,y) memset(x,y,sizeof(x))#define ct cerr<<"Time ...原创 2020-01-31 20:38:28 · 156 阅读 · 0 评论 -
(dp)洛谷P1736创意吃鱼法
洛谷P1736创意吃鱼法思路:他要求一个矩阵只能并且必须在对角线上有1才能被吃掉。如下:1 0 00 1 00 0 1我们用dp[i][j]表示这点满足矩阵的最大值。那么看下图:1 0 0 00 1 0 10 0 1 00 0 0 1可以看出dp[3][3]=3,那怎么求dp[4][4]=2。他显然不是dp[3][3]+1=4≠2。我们观察可以发现,他是被(2,4)的...原创 2020-01-31 18:36:21 · 185 阅读 · 0 评论 -
(背包)AtCoder153E-Crested Ibis vs Monster
AtCoder153E-Crested Ibis vs Monster思路:两天没写代码真的状态好差。完全背包。代码:#include<bits/stdc++.h>#define pii pair<int,int>#define ll long long#define cl(x) memset(x,0,sizeof(x))const int N=1e5+1...原创 2020-01-27 20:21:23 · 454 阅读 · 0 评论 -
(dp) 牛客小白月赛21I I love you
牛客小白月赛21I I love you思路:dp。dp[i]=(dp[i]+(s==‘x’)*dp[i-1])%mod。x为当前位置上要求的字母。代码:#include<bits/stdc++.h>#define pii pair<int,int>#define ll long longconst int N=1e6+10;const int mod=2...原创 2020-01-19 08:33:33 · 294 阅读 · 0 评论 -
(概率dp)洛谷P2095 [JLOI2013]卡牌游戏
洛谷P2095 [JLOI2013]卡牌游戏思路:dp果然是玄学。一开始想顺推,但是因为会有人出局,所以顺推会变得很复杂。看了大佬的题解,才发现逆推的妙处。用dp[i][j]表示i个人组成的环进行游戏,第j个人胜出的概率,那么dp[1][1]一定是1。我们可以想到dp[i][j]的状态肯定是由上一层的状态得出,就是i个人进行游戏后还剩下i-1个人,而i个人所得的概率可以由i-1的状态推出...原创 2020-01-18 14:49:41 · 307 阅读 · 1 评论 -
(带权并查集+dp)POJ1417 True Liars
POJ1417 True Liars题意&思路:一个写了三天的题。一个岛上存在p1个好人和p2个坏人。Akira可以询问n个问题,每个问题由两个编号x,y和一个字符串a(yes或者no)组成。好人会说实话,坏人会说假话。每次询问表示x如果想让你认为y是好人就会回答yes。问是否能够得到好人的编号。加权并查集+dp。加权并查集并不难想,我们不难发现回答yes的是同类,no的是异类。...原创 2020-01-17 23:29:43 · 206 阅读 · 0 评论 -
(状压dp)AcWing1243 糖果
AcWing1243 糖果思路:状压dp。每组糖果用二进制数表示,0表示有,1表示没。预处理一下。dp[j|a[i]]=min(dp[j|a[i]],dp[j]+a[i])。代码:#include<bits/stdc++.h>#define pii pair<int,int>#define ll long longconst int N=1e6+10;con...原创 2020-01-12 20:14:39 · 204 阅读 · 0 评论 -
(状压dp)洛谷P1879玉米田
洛谷P1879玉米田思路:第一次自己把状压dp写出来,有点激动。dp[i][j]表示在第i层的状态j。在预处理的时候判断下每层的合法情况。设第一层可选的状态都是1。代码:#include<bits/stdc++.h>#define pii pair<int,int>#define ll long longconst int N=1e6+10;const ...原创 2020-01-12 15:50:30 · 183 阅读 · 0 评论 -
(状压dp)洛谷P1896互不侵犯
洛谷P1896互不侵犯思路:DP好难,状压DP好难。状压dp就是把状态压缩成一个数,以节省空间。例如这题,国王在一行中要么放要么不放,那我们令放为1,不放为0,就可以组成一个01串,我们把这01串看成一个二进制数的话,就可以将这个状态表示成一个数。因为涉及到二进制,所以状态dp中采用很多位运算。对于题目要求国王四周都不能有其他的国王。在同一行时,我们可以用((s>>1)&a...原创 2020-01-12 10:47:29 · 212 阅读 · 0 评论 -
(数位dp)HDU3652B-number
HDU3652 B-number题意&思路:找出1~n中含有13并能被13整除的数字个数。纠结了好久,状态真的是差。dp[len][p13][mod]三个参数分别表示数位长度;p13的0表示上一位不是1,1表示上一位是1,2表示存在13;mod表示这个数和13的余数。剩下的就是数位dp的板子了,我太菜了啊。代码:#include<bits/stdc++.h>#d...原创 2020-01-11 20:25:44 · 238 阅读 · 0 评论 -
(数位dp)HDU4734 F(x)
HDU4734 F(x)题意&思路:f(x)的定义是,对于十进制数的每位(anan-1……a1),f(a)=an*2n-1+an-1*2n-2+……+a1*20。给你a和b,求在f(x)<=f(a),x∈[0,b]的个数。又是数位dp,依旧没有思路。看了大佬的思路,惊为天人。用dp[i][j]表示第i位,j是后面要凑的权值和。需要的f(a)和你现在的总权值的差值,就是你在接...原创 2020-01-09 15:46:03 · 209 阅读 · 0 评论 -
(数位dp)POJ3252 Round Numbers
POJ3252 Round Numbers题意&思路:规定在二进制数下,0的个数大于等于1的个数的数字为“round number”,给你一个区间,让你找“round number”。数位dp,太难了啊啊啊啊……dp[i][s0][s1]表示第i位的0数量和1数量。记录下前导0的情况。代码:#define ll long long#include<iostream>...原创 2020-01-09 14:25:40 · 158 阅读 · 0 评论 -
(区间dp)2017icpc北京 Pangu and Stones
2017icpc北京 Pangu and Stones题意&思路:给n个石头,每次只能合并连续的l~r块,合并的代价是每堆石子的权值和,问最小的代价是多少。看起来就是石子合并的进阶版(实际上也是),但是好难好难好难啊。看题解都看不懂,要感谢学长的讲解。记一下不太懂得部分:dp[i][j][k]是i~j区间划分为k堆得代价,如果l≤k≤r得话,就可以组成一堆,代价就是i~j所有石子...原创 2020-01-09 11:35:06 · 183 阅读 · 0 评论 -
(数位dp)HDU2098 不要62
HDU2098 不要62思路:对数位dp完全不懂一知半解,参考了大佬的代码才能勉强理解。dfs+记忆化。len记录数位,p6记录此位是不是6,limit记录是否达到数位上界。代码:#include<bits/stdc++.h>#define pii pair<int,int>#define ll long longconst int N=1e6+10;c...原创 2020-01-09 00:59:37 · 188 阅读 · 0 评论 -
(数位dp)HDU3555 Bomb
HDU3555 Bomb题意&思路:给个n,计算1~n中子串含有“49”的数。对于这种求一个区间内含有某种特征的数,一般用数位dp。数位dp就是数字的位上dp,例如这题给的范围是到263-1约等于1019,如果枚举遍历判断的话,肯定会T。如果是数位的话,就只要枚举19位的情况。听起来是不是感觉很简单 实在是太难了,看了好多大佬的题解和分析才懂了一点点。数位dp借助于dfs和记忆...原创 2020-01-08 23:35:09 · 192 阅读 · 0 评论 -
(树形dp,树的直径)HDU4607Park Visit
HDU4607Park Visit题意&思路:公园有n个景点,有n-1条路将他们相连,问游览k个经典最少需要走的路径。树的直径的模板题。树的直径就是两个结点路径最长的一条。我们可以用搜索(DFS/BFS)两次来求,也可以用树形dp。用dp[0][u]表示u结点到其他结点路径的最大值,dp[1][u]表示u结点到其他结点路径的次大值。令v为u的子节点,w为u和v的权值。如果dp[...原创 2020-01-08 10:02:45 · 201 阅读 · 0 评论 -
(树形dp,求重心)POJ3107Godfather
POJ3107Godfather题意&思路:就是求树的重心的模板题。重心就是一个结点的所有子树中最大子树结点最小,我们可以理解为删除这个结点后,能够得到的子树尽可能的平衡。我们用sz[i]表示i结点的子树大小,可以的到s[i]=1+∑s[j],j为i的子节点。所以我们可以假设1为根节点,dfs遍历整棵树,得到每个子结点的子树sz[i]。然后求每个结点的最大子树,对于第u个结点及他...原创 2020-01-07 23:01:06 · 166 阅读 · 0 评论 -
(树形背包)洛谷P2015 二叉苹果树
洛谷P2015 二叉苹果树思路:树形背包的模板题,非常简单,一点都搞不懂,看了大佬的代码和题解才勉强理解一点点。用链式前向星存边,因为这是无向图,所以要存两次边,所以在dfs的时候要判断一下他链接的结点是不是自己的父节点。用dp[i][j]表示第i个结点有j个树枝时能保留苹果的最大值。根据题目,很显然我们要求dp[1][q]。我们可得状态转移方程为:dp[u][i]=max(dp[u][...原创 2020-01-07 21:47:52 · 200 阅读 · 0 评论 -
(树形dp)洛谷P1352没有上司的舞会
洛谷P1352没有上司的舞会思路:树形dp的模板题。dp[i][0]表示不i结点后i子树能得到得最大值,dp[i][1]表示选了i子树后能得到得最大值。用dfs,回溯时通过子节点向上更新信息。dp[u][0]=∑max{dp[v][1],dp[v][0]};dp[u][1]=a[u]+dp[v][0];对于找根节点,我们可以把{u,v}作为一个有向边,根节点即为入度为0的点。代码:...原创 2020-01-07 20:13:03 · 203 阅读 · 0 评论 -
(分组背包)HDU1712ACboy needs your help
HDU1712ACboy needs your help题意&思路:给你课程的数目和总时间,以及每个课程学习i天的收益ai。求最大的收益。分组背包模板题,每个课程作为一个集合,最多只能选一次。代码:#include<bits/stdc++.h>const int N=1e6+10;const int mod=1e7+9;const int maxn=0x3f3f...原创 2020-01-07 16:48:15 · 123 阅读 · 0 评论 -
(分组背包)洛谷P1757通天之分组背包
洛谷P1757通天之分组背包思路:分组背包模板题。代码:#include<bits/stdc++.h>const int N=1e6+10;const int mod=1e7+9;const int maxn=0x3f3f3f3f;const int minn=0xc0c0c0c0;const int inf=99999999;using namespace std...原创 2020-01-07 16:31:53 · 219 阅读 · 0 评论 -
(二维费用背包)洛谷P1507NASA的食物计划
洛谷P1507NASA的食物计划思路:二维费用背包的模板题。代码:#include<bits/stdc++.h>const int N=1e6+10;const int mod=1e7+9;const int maxn=0x3f3f3f3f;const int minn=0xc0c0c0c0;const int inf=99999999;using namespac...原创 2020-01-07 14:42:06 · 197 阅读 · 0 评论 -
(混合背包)HDU3535AreYouBusy
HDU3535AreYouBusy题意&思路:给时间T和工作集合n,有三种类型的集合:最少选一个工作,最多选一个工作,任选。问在T时间时完成工作的幸福度。混合背包问题,有点难,看了题解才慢慢理解。用dp[i][j]表示在第i个集合,时间为j的最大幸福度。1、至少选一项。将dp[i][j]全部赋值负无穷,这样就可以保证不会出现一个都不选的情况。dp[i][j]=max{dp[i...原创 2020-01-07 14:29:42 · 192 阅读 · 0 评论 -
(混合背包)洛谷P1833樱花
洛谷P1833樱花思路:01背包,完全背包和多重背包的混合,分别判断一下就行了。代码:#include<bits/stdc++.h>const int N=1e4+10;const int mod=1e7+9;const int maxn=0x3f3f3f3f;const int minn=0xc0c0c0c0;const int inf=99999999;usin...原创 2020-01-07 13:08:00 · 315 阅读 · 0 评论 -
(01背包)洛谷P1164小A点菜
洛谷P1164小A点菜思路:dp[i]表示花费i元后能点菜的最大方案数,所以可以推出dp[j]=dp[j]+dp[j-a[i]]。令dp[0]=1,就是在j元是,菜的价格a[i]恰好等于j,所以他可以只点那一道菜。代码:#include<bits/stdc++.h>const int N=1e6+10;const int mod=1e7+9;const int maxn=...原创 2020-01-07 11:13:57 · 163 阅读 · 0 评论 -
(01背包)洛谷P1060开心的金明
洛谷P1060开心的金明思路:01背包的模板题。代码:#include<bits/stdc++.h>const int N=1e5+10;const int mod=1e7+9;const int maxn=0x3f3f3f3f;const int minn=0xc0c0c0c0;const int inf=99999999;using namespace std;...原创 2020-01-07 11:01:25 · 183 阅读 · 0 评论 -
(多重背包)HDU1059Dividing
HDU1059Dividing题意&思路:给你质量为1~6的宝石的个数,问能不能等分。对于总质量为奇数的肯定不能等分,对于质量为偶数的,只要dp[m]==m(m=sum/2)就可以等分,这样就是多重背包问题了。坑点是输出格式,要两个换行。代码:#include<bits/stdc++.h>const int N=1e5+10;const int mod=1e7+9...原创 2020-01-07 10:48:14 · 132 阅读 · 0 评论 -
(多重背包)洛谷P1776宝物筛选
P1776宝物筛选思路:多重背包的模板题。代码:#include<bits/stdc++.h>const int N=1e5+10;const int mod=1e7+9;const int maxn=0x3f3f3f3f;const int minn=0xc0c0c0c0;const int inf=99999999;using namespace std;in...原创 2020-01-07 10:27:20 · 219 阅读 · 0 评论 -
(完全背包)HDU1114Piggy-Bank
HDU1114Piggy-Bank题意&思路:给你存钱罐初始和存钱后的重量E,F,金钱的种类N,每种金钱的价值V和重量W。求最少的价值为多少。完全背包的模板题,主要注意是他求得是最小值。代码:#include<bits/stdc++.h>const int N=1e5+10;const int mod=1e7+9;const int maxn=0x3f3f3f3...原创 2020-01-07 09:50:48 · 159 阅读 · 0 评论 -
(完全背包)洛谷P1853投资的最大效益
洛谷P1853投资的最大效益思路:完全背包,用dp[i]表示本金为i时下一年获得的收益,每年再把本金加上收益就好了。代码:#include<bits/stdc++.h>const int N=1e7+10;const int mod=1e7+9;const int maxn=0x3f3f3f3f;const int minn=0xc0c0c0c0;const int ...原创 2020-01-07 09:36:04 · 347 阅读 · 0 评论 -
(完全背包)洛谷P1616疯狂的采药
洛谷P1616疯狂的采药思路:完全背包的板子题。代码:#include<bits/stdc++.h>const int N=1e6+10;const int mod=1e7+9;const int maxn=0x3f3f3f3f;const int minn=0xc0c0c0c0;const int inf=99999999;using namespace std;...原创 2020-01-07 01:09:58 · 532 阅读 · 0 评论 -
(01背包变形)HDU3466Proud Merchants
HDU3466Proud Merchants代码:#include<bits/stdc++.h>const int N=1e6+10;const int mod=1e7+9;const int maxn=0x3f3f3f3f;const int minn=0xc0c0c0c0;const int inf=99999999;using namespace std;str...原创 2020-01-07 00:27:40 · 181 阅读 · 0 评论 -
(01背包)洛谷P1048采药
洛谷P1048采药思路:01背包板子题。dp[j]=max(dp[j],dp[j-w[i]]+v[i])。代码:#include<bits/stdc++.h>const int N=1e6+10;const int mod=1e7+9;const int maxn=0x3f3f3f3f;const int minn=0xc0c0c0c0;const int inf=9...原创 2020-01-06 23:29:47 · 173 阅读 · 0 评论 -
(01背包)洛谷P2925干草出售Hay For Sale
洛谷P2925干草出售Hay For Sale思路:01背包的一个板子题。可以得出状态转移方程为dp[j]=max(dp[j],dp[j-a[i]]+a[i])。代码:#include<bits/stdc++.h>const int N=1e5+10;const int mod=1e7+9;const int maxn=0x3f3f3f3f;const int minn...原创 2020-01-06 23:19:43 · 225 阅读 · 0 评论 -
(概率dp)CF148Bag of mice
CF148Bag of mice题意&思路:有w只白鼠和b只黑鼠,公主和龙轮流从袋子中抓老鼠,抓到白鼠的获胜。龙在抓老鼠的时候,有一只老鼠会逃跑。公主先手,问公主胜利的概率。第一次公主要获胜的概率是:w/(w+b)。如果第一次公主没有抓到白鼠,那么公主想要获胜则需要龙也抓到黑鼠,所以概率是:(b/(w+b))*((b-1)/(w+b-1)。那么逃跑的老鼠如果是白色的概率:w/(w...原创 2020-01-06 22:11:31 · 183 阅读 · 0 评论 -
(期望dp)HDU4405Aeroplane chess
HDU4405Aeroplane chess题意&思路:飞行棋,有些点直接相连,即可以从x点直接到y点(x<=y),问投骰子次数的期望。期望dp。我们可以得到在dp[n]之后次数肯定为0,所以从后推,可得dp[i]=dp[i+1]/6+dp[i+2]/6+dp[i+3]/6+dp[i+4]/6+dp[i+5]/6+1。对于路径x->y,因为我们不需要耗费次数就可以从x到...原创 2020-01-06 21:20:08 · 174 阅读 · 0 评论