随笔分类 - Algorithm / 动态规划
摘要:一、算法简析 数位dp题目的特点 求某个区间 \([L,R]\) 内,满足某种性质的数的个数。 数位dp的解题技巧 技巧一 类似前缀和,转换为 \([0,R]-[0,L-1]\) 求解。分别统计两个区间内满足条件的数的个数,再作差。 技巧二 由于边界 \(R\) 的限制,首先就要保证讨论的数小于等于
阅读全文
摘要:一、题目描述 将 \(2022\) 拆分成 \(10\) 个互不相同的正整数之和,有多少种方案? 二、问题简析 令 \(dp[i][j]=\) \(i\) 的 \(j\) 划分的方案数(满足互不相同的正整数)。有两种实现方式: \(dp[i][j]\) 不含 \(1\) 在 \(dp[i-j][j]
阅读全文
摘要:一、问题描述 有 \(n\) 个相同的物品,将它们划分成 \(m\) 组,有几种划分方法。 注:以下划分都算一种: 1 + 1 + 2 1 + 2 + 1 2 + 1 + 1 二、问题简析 本题采用动态规划求解。令 \(dp[i][j]=\) \(i\) 的 \(j\) 划分的方案数。值得注意的是,
阅读全文
摘要:一、题目描述 P8687 [蓝桥杯 2019 省 A] 糖果 二、问题简析 由题意,糖果的种类 \(M\) 最多为 \(20\),所以我们可以采用二进制位的方式来表示每包糖果的组成。具体:二进制的第 \(i\) 位表示第 \(i + 1\) 种糖果,\(1\) 表示有,\(0\) 表示无。通过这种表
阅读全文
摘要:一、问题描述 P1020 [NOIP1999 提高组] 导弹拦截 二、问题简析 该题要我们求两个问题: 1、不上升子序列的最大长度 2、不上升子序列的最少个数 利用 \(Dilworth\) 定理,我们得到不上升子序列的最少个数等于上升子序列的最大长度。 现在,就是求这两个问题: 1、不上升子序列的
阅读全文
摘要:一、题目描述 B3637 最长上升子序列 二、问题简析 2.1 法一:\(O(N^2)\) 令 \(dp[i]=\) 以 \(a_i\) 结尾的上升子序列的最大长度。 以 \(a_i\) 结尾的上升子序列有两种可能: 1、仅有 \(a_i\) 一个元素 2、在满足 \(j < i\) 且 \(a_j
阅读全文
摘要:@目录一、题目描述二、算法简析三、本题代码 一、题目描述 P9242 [蓝桥杯 2023 省 B] 接龙数列 二、算法简析 核心思想:动态规划 题目要我们求删除数的最小个数。可以转变问题,求能形成的接龙数列的最大长度 \(MaxLength\),\(n - MaxLength\) 即为所求。 由题意
阅读全文
摘要:一、问题描述 P8744 [蓝桥杯 2021 省 A] 左孩子右兄弟 二、问题简析 2.1 左孩子右兄弟 首先,我们要了解怎么通过“左孩子右兄弟”表示法将多叉树转化为二叉树:对于一棵多叉树,一个父节点有多个子节点,将第一个子节点作为父节点的左孩子,并与父节点相连;将剩余的子节点作为左孩子的右兄弟,并
阅读全文
摘要:一、题目描述 P8614 [蓝桥杯 2014 省 A] 波动数列 二、问题简析 设第一个数为 \(x_0\),\(d_i=a~or~-b\),则长度为 \(n\) 的数列的和为: \[\begin{split} s&=x_0+x_1+x_2+...+x_{n-1}\\ &=(x_0 + 0) + (
阅读全文
摘要:一、题目描述 P8742 [蓝桥杯 2021 省 AB] 砝码称重 二、问题简析 类似 01背包,对于每个元素,可以拿(+、-)或不拿。 令 \(dp[i + 1][j]=\) 前 \(i + 1\) 个元素是否可以使值为 \(j\)。 \[dp[i + 1][j] = \begin{cases}
阅读全文
摘要:一、问题简述 有一棵 \(n\) 个节点组成的树,每个节点 \(a_i\) 有一个权值 \(a_i.worth\)。求子树的点权值和的最大值。 二、算法简析 该问题要用树形dp求解。 设 \(dp[u] =\) 以 \(u\) 为根节点的子树的点权值和的最大值。我们采用邻接表的形式存储边,\(G[u
阅读全文
摘要:题目描述 有 \(n\) 个重量和价值分别为 \(w_i\),\(v_i\) 的物品。从这些物品中挑选出总重量不超过 \(W\) 的物品,求所有挑选方案中价值总和的最大值。在这里,每种物品可以挑选任意多件。 数据范围: \(1\le n\le100\) \(1\le w_i,v_i\le100\)
阅读全文
摘要:01背包 题目描述 有 \(n\) 个重量和价值分别为 \(w_i\),\(v_i\) 的物品。从这些物品中挑选出总重量不超过 \(W\) 的物品,求所有挑选方案中价值总和的最大值。 数据范围: \(1\le n\le100\) \(1\le w_i,v_i\le100\) \(1\le W\le1
阅读全文
摘要:题目描述 有 \(n\) 个重量和价值分别为 \(w_i\),\(v_i\) 的物品。从这些物品中挑选出总重量不超过 \(W\) 的物品,求所有挑选方案中价值总和的最大值。 数据范围: \(1\le n\le100\) \(1\le w_i,v_i\le100\) \(1\le W\le10000\
阅读全文