
DP
wly127
这个作者很懒,什么都没留下…
展开
-
CSP-S 2019————Emiya 家今天的饭————DP+思维
题解:本题主要考查DP+思维。简要题意:一个矩阵,要求每行只选一个节点,每列选的节点不能超过所有选的节点的一半,不能不选,给出每个节点的选择方案数,求总方案数。1.DP+思维:(1).维护每列已选的节点复杂度太大,应该不行,所以先不考虑每列不超过一半,求出总数,再减去不合法的方案数,应用逆向思维转换问题。(2).设dp[i][j][k]dp[i][j][k]dp[i][j][k]表示前i...原创 2020-01-28 22:28:33 · 618 阅读 · 0 评论 -
Codeforces 831D Office Keys————DP/二分
题解:本题主要考查DP/二分。简要题意:给你nnn个人,有kkk把钥匙,终点为mmm.每个人要求拿一把钥匙到终点,问多长时间,能够使得所有人都到达。把所有人的位置以及钥匙的位置全部sort一遍,1.二分:排序后,前一个去的钥匙位置一定在后一个人取得钥匙前面,否则交叉浪费时间。然后二分最长时间,从左向右验证。2.DP:设dp[i][k]dp[i][k]dp[i][k]表示前iii个人,前jj...原创 2020-01-22 16:02:41 · 218 阅读 · 0 评论 -
USACO06NOV Corn Fields————状压DP
题解:本题主要考查状压DP简要题意:有m∗nm*nm∗n的田地,000表示贫瘠,不能用来种草;111表示肥沃,可以种草。要求没有哪两块草地有公共边,求共有几种方案。1.状压DP:数据范围为(1≤m≤12;1≤n≤12)(1≤m≤12;1≤n≤12)(1≤m≤12;1≤n≤12),应该状压。状压DP一般步骤:(1).预处理:处理每一行的情况,用f[i]f[i]f[i]表示;(2).判断合法性...原创 2019-12-21 19:47:56 · 199 阅读 · 0 评论 -
P1472奶牛家谱 Cow Pedigrees————树形DP
题解:本题主要考查树形dp。简要题意:一些二叉树总共有NNN个节点,每一个节点的度是000或222。树的高度为KKK,高度是从根到最远的那个叶子所需要经过的结点数。有多少不同的树结构。1.树形dp:先设dp[i][j]dp[i][j]dp[i][j]表示iii个点小于等于jjj层的方案数,考虑dp过程:一般树形背包,除非是多叉树用分组背包只能用dfs写,否则可以先考虑写一个记忆化搜索(是一篇...原创 2019-12-03 21:05:01 · 227 阅读 · 0 评论 -
P1441 砝码称重————dp+dfs
题解:本题主要考察dp+dfs。简要题意:现有nnn个砝码,重量分别为a1,a2,a3,……,an,a_1,a_2,a_3,……,a_n,a1,a2,a3,……,an,在去掉mmm个砝码后,问最多能称量出多少不同的重量(不包括0)。1.dfs:dfs枚举不取哪mmm个砝码的情况,然后对这些情况进行dp,用ans存储。2.dp:设f[i][j]f[i][j]f[i][j]为当前选取到了...原创 2019-11-11 19:04:28 · 218 阅读 · 0 评论 -
NOIp普及组 2003数字游戏————区间DP+前缀和
题解:本题主要考察区间DP简要题意:有一圈整数(一共nnn个),你要按顺序将其分为mmm个部分,各部分内的数字相加,相加所得的mmm个结果对101010取模后再相乘,最终得到一个数kkk。游戏的要求是使你所得的kkk最大或者最小。1.区间dp:设maxn[i][j][h]设maxn[i][j][h]设maxn[i][j][h]表示从i到j分成h段的最大值(最小值为minn)maxn[i][j...原创 2019-11-05 20:09:20 · 300 阅读 · 0 评论 -
[SDOI2006]保安站岗————树形DP
题解:本题主要考查树形DP。简要题意:在一棵点有点权的树上,选择一些点,这些点能将所有与它们相连的点覆盖,最终将整棵树上的点全部覆盖,试求最小代价1.树形DP:本题很巧妙,有三种情况,所以设:f[x][0]f[x][0]f[x][0]为选择x点来覆盖x点f[x][1]f[x][1]f[x][1]为x节点被儿子y覆盖f[x][2]f[x][2]f[x][2]为x节点被父亲节点覆盖易得选择...原创 2019-11-01 20:03:57 · 151 阅读 · 0 评论 -
P1122 最大子树和————树形DP
题解:本题主要考查树形DP。简要题意:给定一棵NNN个节点的无根树,点有点权,点权有正有负,求这棵树的联通块的最大权值之和是多少。1.树形DP:f[p]f[p]f[p]表示以ppp为根且包含u的最大权联通块因为点权有正有负,负的点就可以不取,所以用000比较:f[p]+=max(0,f[k]);f[p]+=max(0,f[k]);f[p]+=max(0,f[k]);(kkk为ppp的儿子)...原创 2019-10-31 21:18:58 · 480 阅读 · 0 评论 -
NOIp提高组2014 飞扬的小鸟————dp+背包综合
题解:本题主要考查背包综合。简要题意:一个长为nnn,高为mmm的二维平面,其中有kkk个管道。小鸟每个单位时间向右移的距离为111,在横坐标位置0∼n0∼n0∼n点击屏幕,小鸟就会上升高度XiX_iXi,每个单位时间可以点击多次。如果在横坐标位置0∼n0∼n0∼n不点击屏幕,小鸟就会下降一定高度YiY_iYi,小鸟高度等于000或者小鸟碰到管道时失败,小鸟高度为mmm时,无法再上升。1....原创 2019-10-30 18:24:00 · 172 阅读 · 0 评论 -
NOIp提高组2008 传纸条————dp
题解:本题主要考查dp简要题意:纸条从(1,1)(1,1)(1,1)传到(n,m)(n,m)(n,m)再传回来,每个格子都有一个数字且通过后不再能通过,求来回两条传递路径,使得这2条路径上数字之和最大。1.dp:本题和方格取数几乎一样,那么显然,转移方程是f[i][j][k][l]=max(f[i][j−1][k−1][l],f[i−1][j][k][l−1],f[i][j−1][k][l−...原创 2019-10-29 15:17:17 · 206 阅读 · 0 评论 -
NOIp提高组 2005 过河————dp+路径压缩
题解:本题主要考查dp+路径压缩。简要题意:有一条n(n<=109)n(n<=10^9)n(n<=109)米长的桥,桥上有mmm个石头。小青蛙从桥头开始,向终点跳。跳跃距离为SSS到TTT,求青蛙最少需要踩到的石子数。1.dp:本题的难点不在dp的转移方程上,易得出:设f[i]f[i]f[i]为在iii上经过的石头数位置上有石头:f[i]=min(f[i],f[i−j]+1...原创 2019-10-26 18:34:07 · 229 阅读 · 0 评论 -
1156 垃圾陷阱————dp
题解:本题是经典的dp题,主要考查dp。简要题意:奶牛落在D米深井,每个垃圾扔下的时间t以及每个垃圾堆放的高度h和吃进该垃圾能维持生命的时间f,奶牛有10小时的能量。求最早什么时候可以爬出或输出卡门最长可以存活多长时间。1.dp:设f[i][j]f[i][j]f[i][j]表示前i个垃圾在到达j的高度时剩余的最大血量,则有两种情况:1.吃:f[i][j]=max(f[i][j],f[i−1]...原创 2019-10-23 19:27:28 · 195 阅读 · 0 评论 -
NOIp2012摆花(普及组T3)————动态规划
题解:本题主要考查动态规划。方程式dp[i][j]=dp[i-1][j-k]+dp[i][j],f[i][j]指摆第i个花后总共摆了j盆的方案数,第i种花由i-1种决定,k表示这种花摆多少要枚举,j−k表示没有用这k盆花装饰时的方案数。代码如下:#include<iostream>using namespace std;int n,m;int a[8000];int dp[...原创 2018-12-23 14:00:41 · 538 阅读 · 0 评论 -
NOIp2008传球游戏(普及组T3)————动态规划
题解:本题主要考查动态规划。因为求只能左右传,所以i同学只能来自于的左边一个同学(i-1)和右边一个同学(i+1)。传j次球就是j-1次传到左边和右边的方案数之和。f[i][k]=f[i-1][k-1]+f[i+1][k-1],(i=1或n时,需单独处理)。代码如下:#include&amp;lt;iostream&amp;gt;using namespace std;int n,m,i=1,j;in...原创 2018-12-16 11:55:53 · 702 阅读 · 0 评论 -
NOIP2004合唱队列(提高组T3)————单调队列,动态规划(最长上升序列,最长下降序列)
题解:本题主要考查单调队列,动态规划(最长上升序列,最长下降序列)。这个序列是一个中间高,两头底的序列,先解决从T1到Ti这一段单调递增的序列,再解决Ti到TK这一段单调递减的序列(注意数值的更新)。代码如下:#include<iostream>#include<algorithm>using namespace std;int q(int x);int n,i...原创 2018-10-05 21:54:38 · 501 阅读 · 0 评论 -
Noip 2000 方格取数————dp
题解:本题主要考查动态规划。简要题意:有N∗NN*NN∗N的方格图,在某些方格中填入正整数,(1,1)(1,1)(1,1)到(n,n)(n,n)(n,n)共走两次,找出2条这样的路径,走过的方格中将变为0,使得取得的数之和为最大1.动态规划:因为本题数据规模小,可直接四维dp求代码如下:#include<iostream>#include<algorithm>u...原创 2019-09-13 09:55:22 · 221 阅读 · 0 评论 -
Noip2013 花匠————dp
题解:本题主要考查dp求最大抖动序列。简要题意:求最大抖动序列.比较简单代码如下:#include<iostream>using namespace std;int n,last,x,v=0,ans=0;int main(){ cin>>n>>last; for(int i=2;i<=n;i++) { ci...原创 2019-09-27 21:08:10 · 187 阅读 · 0 评论 -
NOIp2003 加分二叉树————区间DP,树形DP
题解:本题主要考查区间DP,树形DP简要题意:一个N节点的二叉树tree的中序遍历为(1,2,3,…,n),其中数字1,2,3,…,n编号。每个节点有分数,加分计算方法如下:左子树的加分× 右子树的加分+根的分数。求最大值和它的先序遍历。1.DP:中序遍历为左 根 右,自然我们想到要用区间DP,方程就是根据题意。方程:f[i][j]=MAX(f[i][k−1]∗f[k+1][j]+f[...原创 2019-09-27 22:31:16 · 144 阅读 · 0 评论 -
洛谷P1352 没有上司的舞会————树形DP
题解:本题主要考查树形DP。简要题意:一个树,每个点有一个“快乐”值,父子结点不能同时快乐,问这个结构的最大快乐值。1.树形DP:典型的树形DP,思考如何写出树规方程,即思考根与子节点的关系。方程: f[1][p]=max(max(f[1][p]+f[0][i],f[1][p]),f[0][i]);f[1][p]=max(max(f[1][p]+f[0][i],f[1][p]),f[0][i...原创 2019-10-02 10:31:01 · 133 阅读 · 0 评论 -
P1020 导弹拦截———— 动态规划,树状数组
题解:本题主要考查动态规划,求最长不上升子序列和最长上升子序列。因为数据规模大,就用树状数组来维护。代码如下: #include<iostream>#include<algorithm>#include<cstdio>#include<cstring> using namespace std;int n,m,maxn=-123456;...原创 2019-04-08 11:55:43 · 485 阅读 · 0 评论