
动态规划
文章平均质量分 68
动态规划
Genevieve_xiao
还未而立却想躺平的蒟蒻acmer
2021.11.20 AFO.
展开
-
【树】【动态规划】关于树上的一些问题
树的直径树的直径,又称树的最长链,定义为一棵树上最远的两个节点的路径,即树上一条不重复经过某一条边的最长的路径。树的直径也可以代指这条路径的长度。树上任意点能到的最远点,一定是树的直径的某个端点。求解树的直径有两种方法 时间复杂度都为O(n)O(n)O(n)方法一 两遍搜索:从树上任意点u开始DFS(BFS)遍历图,得到距离u最远的结点v,然后从v点开始DFS遍历图,得到距离v最远的结点w, 则v、w之间的距离就是树的直径。方法二 树形dp:DP:显然最长路的两个端点必然是叶子或者根节点。设原创 2021-11-03 21:01:40 · 489 阅读 · 1 评论 -
【动态规划】线性dp之子序列模型
走格子模型原创 2021-10-31 16:04:18 · 173 阅读 · 0 评论 -
【动态规划】到达型dp
到达型dp一般将dp数组设为bool型,常用位运算| 实现状态的传递。P2663 越越的组队本题状态设计很特殊:dp[i][j]dp[i][j]dp[i][j]表示前iii个人能否达到jjj分。bool dp[110][11000];int main(){ cin>>n; dp[0][0]=1; for(int i=1;i<=n;i++){ cin>>a[i]; sum+=a[i]; } for(int i=1;i<=n;i++){ for(原创 2021-10-29 14:23:01 · 267 阅读 · 0 评论 -
【动态规划】求最大加权矩形的两种方法 二维前缀和 矩阵压缩
矩阵压缩int main(){ scanf("%d",&n); for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ scanf("%d",&x); a[i][j]=a[i-1][j]+x; //求列前缀和 } } for(int i=1;i<=n;i++){ for(int k=1;k<=i;k++){ int f[N]={0},dp[N]={0}; for(int j=1;j<原创 2021-10-29 14:12:16 · 319 阅读 · 0 评论 -
【动态规划】之背包问题九讲
背包问题01背包01背包朴素01背包优化完全背包完全背包朴素完全背包一级优化完全背包二级优化多重背包多重背包朴素多重背包二进制优化多重背包单调队列优化分组背包混合背包二维费用的背包01背包01背包01背包题目描述有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。接下来有 N原创 2021-08-06 01:04:18 · 1302 阅读 · 0 评论