![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
AcWing 算法基础课 动态规划
文章平均质量分 56
AcWing 算法基础课 动态规划
ZhgDgE
这个作者很懒,什么都没留下…
展开
-
【树形DP】P2458 [SDOI2006]保安站岗
题目链接:P2458 [SDOI2006]保安站岗题意:给出一棵 n 个节点以 1 为根的树,点有点权 valxval_xvalx选择一些点,使得点权和最小,同时每个节点要被覆盖。某节点被覆盖的充要条件是被自己覆盖或被关联的点覆盖。题解:[ SDOI 2006 ] 保安站岗题解 P2458 【[SDOI2006]保安站岗】PS:之前的题是树上两层节点相互影响的,可以用dp[u][0/1]表示节点选或不选没有上司的舞会,某个孩子节点被选,此点不能选,上一层自由原创 2021-08-13 17:22:12 · 98 阅读 · 0 评论 -
【树上背包】P2015 二叉苹果树
题目链接:P2015 二叉苹果树题意:找到树上的一个包含根节点的大小为Q的连通块,使得树边权值和最大。思路:树上背包即可。本题解用的是分组背包。一个子结点选取 1,2....Q1,2....Q1,2....Q 视为一组内互斥的物品,在两组内枚举选取恰好装满父节点的物品。代码://多叉:分组背包#include<iostream>#include<vector>using namespace std;typedef long long LL;con原创 2021-08-13 17:09:22 · 96 阅读 · 0 评论 -
【最大子树和】洛谷 P1122
题目链接:P1122 最大子树和题意:找出树上的一个连通块,使得连通块权值和最大。思路:每个节点都可以选或不选,和没有上司的舞会思路一样。dp[u]dp[u]dp[u] 代表选择 uuu 节点,0 代表不选择 uuu 节点。定义 dp[u]dp[u]dp[u] 为选择 uuu 的联通最大权值。转移方程:dp[u]=w[u]+∑dp[si]dp[u]=w[u]+\sum{dp[s_i]}dp[u]=w[u]+∑dp[si]#include<iostream>#includ原创 2021-08-13 16:36:15 · 72 阅读 · 0 评论 -
【树形DP】P1352 没有上司的舞会
题目链接:P1352 没有上司的舞会题意:从一颗树上选点而且每个点不能直接相连,求最大值思路:dp[i][0]dp[i][0]dp[i][0] 就表示以i节点为根节点,不选i节点的最大值,dp[i][1]dp[i][1]dp[i][1] 表示以i节点为根节点,选择i节点的最大值。我们建好图,然后v为u的子节点,当u节点不选的时候,那么后面v节点选和不选我们找一个最大值 dp[u][0]+=max(dp[v][0],dp[v][1])dp[u][0]+=max(dp[v][0],dp[v][1])d原创 2021-08-13 15:58:53 · 63 阅读 · 0 评论 -
【状压DP】POJ 1185 炮兵布阵
题目链接:炮兵阵地题意:一个n*m矩阵(n<=100, m<=10),每个方格可以放大炮用0表示,不可以放大炮用1表示(原题用字母),让放最多的大炮,大炮与大炮间不会互相攻击。每个炮的攻击范围是上下左右两个距离。因为放置炮兵会受上一列和上上一列的影响,因此要多设一维。dp[i,j,k]dp[i,j,k]dp[i,j,k] :在上一列状态为 kkk 的前提下,在第 iii 列放置状态为 jjj 的炮兵的状态的所有放置方案。转移的时候枚举上上一列的状态 ppp 时,就可以使用原创 2021-08-05 21:13:03 · 93 阅读 · 0 评论 -
【经典状压DP】HDU-1565 方格取数(1)
题目链接:方格取数(1)定义 dp[i,j]dp[i,j]dp[i,j] 为在前 iii 列放置棋子,且第 iii 列放置方式为 jjj 的最大放置数量。转移方程:dp[i,j]=dp[i−1,k]+sum[j]dp[i,j]=dp[i-1,k] + sum[j] dp[i,j]=dp[i−1,k]+sum[j](其中 kkk 和 jjj 均为有效状态,且 kkk ,,jjj 没有重叠)可以预处理,筛去大部分无效状态。即判断 ( i & ( i>>1) ) =原创 2021-08-05 20:48:41 · 63 阅读 · 0 评论 -
【算法基础课】状压DP
文章目录前置知识:蒙德里安的梦想最短哈密顿距离前置知识:获得 xxx 的二进制第 iii 位: x >> & 1把二进制看为集合(1表示存在于集合)的话:获得两个集合的交集,并集:x & y , x | y判断其中一个是否是另一个的子集:(x & y) == x蒙德里安的梦想题解:[AcWing], 蒙德里安的梦想题意:就是将一个n * m的二维矩阵,分成若干个1 * 2的方格,有多少种分配方式(完全分配)分析:只考虑横着放的。定原创 2021-08-05 20:24:47 · 86 阅读 · 0 评论 -
【HDU-1069】Monkey and Banana (转换研究对象)
题目链接:Monkey and Banana题解:Monkey and Banana(最长上升子序列+贪心)题意:有n种长方体,每种有无限块,求最多能垒多高,要求(长方体可以以任意面为底摆放;上面长方体的长和宽要严格小于下面长方体的长和宽)观察题面,看起来每种有无限块,但是块面是严格小于的,即同一种面不能重叠。同理可推得一块长方体最多用3次。那么就可以把长方体的3个块面存起来排序,线性dp即可。代码:#include<iostream>#include<map>#原创 2021-08-05 19:43:13 · 241 阅读 · 0 评论 -
【算法基础课】区间DP
区间DP(入门)原创 2021-08-05 19:25:08 · 56 阅读 · 0 评论 -
【算法基础课】线性DP
文章目录最长上升子序列最长公共子序列字符串距离最大和问题- 【最大子序列和】- 【最大子矩阵和】动态规划 —— 线性 DP最长上升子序列Acw895-最长上升子序列dp[i]dp[i]dp[i] 定义为以 a[i]a[i]a[i] 为结尾的最长上升子序列的长度/总和#include<iostream>#include<cstdio>using namespace std;typedef long long ll;const int N=1e3+10;int原创 2021-08-05 11:02:19 · 72 阅读 · 0 评论 -
【背包的其他问法】恰好、至少装满,方案数
文章目录背包恰好装满背包至少装满,且价值最少恰好装满的方案数背包恰好装满DP背包问题的 恰好装满 问题 ~~恰好装满背包,又分为价值最大和价值最小根据 dpdpdp 函数的定义不同,dp[0,0−V]dp[0,0-V]dp[0,0−V] 初始化值也不同dp[i,j]dp[i,j]dp[i,j] 定义为前 iii 个物品 上限( or 刚好装满的限度)VVV 为上限时,dp[0,0−V]dp[0,0-V]dp[0,0−V] 为有效状态,且易得值为0.要求刚好装满的限度为 VVV原创 2021-08-05 10:23:20 · 1290 阅读 · 0 评论 -
【算法基础课】动态规划 背包
文章目录01背包完全背包多重背包转化为01背包求解分组背包01背包这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。定义F[i,j]F[i,j]F[i,j]为前iii个物体在上限为VVV的情况下能获得的最大价值由放或不放两个状态空间转移来转移方程:F[i,v]=max(F[i−1,v],F[i−1,v−Ci]+Wi)转移方程:F[i,v] = max ( F[i − 1,v],F[i − 1,v − C i ] + W i )转移方程:F[i,v]=max(F[i−1,v]原创 2021-08-05 09:43:46 · 56 阅读 · 0 评论