![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
文章平均质量分 53
AcWing的算法基础课的动态规划专栏
奋斗吧!骚年!
一名爱健身的软件工程本科生
展开
-
动态规划:计数问题—数位统计DP
每个结果包含十个用空格隔开的数字,第一个数字表示 0 出现的次数,第二个数字表示 1 出现的次数,以此类推。其中 0 出现 10 次,1 出现 10 次,2 出现 7 次,3 出现 3 次等等…给定两个整数 a 和 b,求 a 和 b 之间的所有数字中 0∼9 的出现次数。当读入一行为 0 0 时,表示输入终止,且该行不作处理。每组测试数据占一行,包含两个整数 a 和 b。每组数据输出一个结果,每个结果占一行。输入包含多组测试数据。...原创 2022-08-15 16:50:29 · 515 阅读 · 2 评论 -
动态规划:整数划分—计数类DP
题目: AcWing 900. 整数划分一个正整数 n 可以表示成若干个正整数之和,形如:n=n1+n2+…+nk,其中 n1≥n2≥…≥nk,k≥1。我们将这样的一种表示称为正整数 n 的一种划分。现在给定一个正整数 n,请你求出 n 共有多少种不同的划分方法。输入格式共一行,包含一个整数 n。输出格式共一行,包含一个整数,表示总划分数量。由于答案可能很大,输出结果请对 109+7 取模。数据范围1≤n≤1000输入样例:输出样例:题目分析:思路:把1,2,3, … n分别看做n个物体的体积,这原创 2022-06-01 21:47:25 · 98 阅读 · 0 评论 -
动态规划:石子合并—区间DP
题目: AcWing 282. 石子合并设有 N 堆石子排成一排,其编号为 1,2,3,…,N。每堆石子有一定的质量,可以用一个整数来描述,现在要将这 N 堆石子合并成为一堆。每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和,合并后与这两堆石子相邻的石子将和新堆相邻,合并时由于选择的顺序不同,合并的总代价也不相同。例如有 4 堆石子分别为 1 3 5 2, 我们可以先合并 1、2 堆,代价为 4,得到 4 5 2, 又合并 1,2 堆,代价为 9,得到 9 2 ,再合并得到 11,总代价为原创 2022-05-24 00:02:23 · 203 阅读 · 0 评论 -
动态规划:分组背包问题—背包问题
题目: AcWing 9. 分组背包问题有 N 组物品和一个容量是 V 的背包。每组物品有若干个,同一组内的物品最多只能选一个。每件物品的体积是 vij,价值是 wij,其中 i 是组号,j 是组内编号。求解将哪些物品装入背包,可使物品总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行有两个整数 N,V,用空格隔开,分别表示物品组数和背包容量。接下来有 N 组数据:每组数据第一行有一个整数 Si,表示第 i 个物品组的物品数量;每组数据接下来有 Si 行,每行有两个整数 v原创 2022-05-21 11:47:47 · 216 阅读 · 0 评论 -
动态规划:多重背包问题 II—背包问题
题目: AcWing 5. 多重背包问题 II有 N 种物品和一个容量是 V 的背包。第 i 种物品最多有 si 件,每件体积是 vi,价值是 wi。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。接下来有 N 行,每行三个整数 vi,wi,si,用空格隔开,分别表示第 i 种物品的体积、价值和数量。输出格式输出一个整数,表示最大价值。数据范围0<N≤10000<原创 2022-05-20 23:39:08 · 172 阅读 · 0 评论 -
动态规划:多重背包问题 I—背包问题
题目: AcWing 4. 多重背包问题有 N 种物品和一个容量是 V 的背包。第 i 种物品最多有 si 件,每件体积是 vi,价值是 wi。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。接下来有 N 行,每行三个整数 vi,wi,si,用空格隔开,分别表示第 i 种物品的体积、价值和数量。输出格式输出一个整数,表示最大价值。数据范围0<N,V≤1000<vi原创 2022-05-16 23:43:19 · 218 阅读 · 0 评论 -
动态规划:完全背包问题—背包问题
题目: AcWing 3. 完全背包问题有 N 种物品和一个容量是 V 的背包,每种物品都有无限件可用。第 i 种物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 种物品的体积和价值。输出格式输出一个整数,表示最大价值。数据范围0<N,V≤10000<vi,w原创 2022-05-16 21:44:31 · 237 阅读 · 0 评论 -
动态规划:01背包问题—背包问题
题目: AcWing 2. 01背包问题 有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 件物品的体积和价值。输出格式输出一个整数,表示最大价值。数据范围0<N,V≤10000<vi,w原创 2022-05-16 20:58:18 · 92 阅读 · 0 评论 -
动态规划:编辑距离—线性DP
题目: AcWing 899. 编辑距离给定 n 个长度不超过 10 的字符串以及 m 次询问,每次询问给出一个字符串和一个操作次数上限。对于每次询问,请你求出给定的 n 个字符串中有多少个字符串可以在上限操作次数内经过操作变成询问给出的字符串。每个对字符串进行的单个字符的插入、删除或替换算作一次操作。输入格式第一行包含两个整数 n 和 m。接下来 n 行,每行包含一个字符串,表示给定的字符串。再接下来 m 行,每行包含一个字符串和一个整数,表示一次询问。字符串中只包含小写字母,且长度均不超原创 2022-05-13 20:08:18 · 108 阅读 · 0 评论 -
动态规划:最短编辑距离—线性DP
题目: AcWing 902. 最短编辑距离给定两个字符串 A 和 B,现在要将 A 经过若干操作变为 B,可进行的操作有:1.删除–将字符串 A 中的某个字符删除。2.插入–在字符串 A 的某个位置插入某个字符。3.替换–将字符串 A 中的某个字符替换为另一个字符。现在请你求出,将 A 变为 B 至少需要进行多少次操作。输入格式第一行包含整数 n,表示字符串 A 的长度。第二行包含一个长度为 n 的字符串 A。第三行包含整数 m,表示字符串 B 的长度。第四行包含一个长度为 m 的字符原创 2022-05-13 19:24:52 · 225 阅读 · 0 评论 -
动态规划:最长公共子序列—线性DP
题目: AcWing 897. 最长公共子序列 给定两个长度分别为 N 和 M 的字符串 A 和 B,求既是 A 的子序列又是 B 的子序列的字符串长度最长是多少。输入格式第一行包含两个整数 N 和 M。第二行包含一个长度为 N 的字符串,表示字符串 A。第三行包含一个长度为 M 的字符串,表示字符串 B。字符串均由小写字母构成。输出格式输出一个整数,表示最大长度。数据范围1≤N,M≤1000输入样例:4 5acbdabedc输出样例:3题目分析:状态表示:f(i原创 2022-05-12 23:40:11 · 144 阅读 · 0 评论 -
动态规划:最长上升子序列 II—线性DP
题目: AcWing 896. 最长上升子序列 II 给定一个长度为 N 的数列,求数值严格单调递增的子序列的长度最长是多少。输入格式第一行包含整数 N。第二行包含 N 个整数,表示完整序列。输出格式输出一个整数,表示最大长度。数据范围1≤N≤100000,−109≤数列中的数≤109输入样例:73 1 2 1 8 5 6输出样例:4题目分析:这一道题在前一道题的基础上,加了二分和贪心。前一道题在寻找状态转移时,我们是将第i个数之前的数都遍历了一遍,这样如果数据加多原创 2022-05-11 21:47:32 · 177 阅读 · 0 评论 -
动态规划:最长上升子序列—线性DP
题目: AcWing 895. 最长上升子序列给定一个长度为 N 的数列,求数值严格单调递增的子序列的长度最长是多少。输入格式第一行包含整数 N。第二行包含 N 个整数,表示完整序列。输出格式输出一个整数,表示最大长度。数据范围1≤N≤1000,−109≤数列中的数≤109输入样例:73 1 2 1 8 5 6输出样例:4题目分析:从题目中我们可以发现,求某个序列我们可以用一维f[n]来表示状态状态表示:f[n]表示所有以第i个数结尾的最大上升子序列的个数状态转移原创 2022-05-11 21:07:12 · 174 阅读 · 0 评论 -
动态规划:数字三角形—线性DP
题目: AcWing 898. 数字三角形给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和最大。输入格式第一行包含整数 n,表示数字三角形的层数。接下来 n 行,每行包含若干整数,其中第 i 行表示数字三角形第 i 层包含的整数。输出格式输出一个整数,表示最大的路径数字和。数据范围1≤n≤500,−10000≤三角形中的整数≤10000输入样例:573 88 1 02原创 2022-05-11 20:33:27 · 161 阅读 · 0 评论