随笔分类 -  dp

摘要:题目 给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。 思路 动态规划问题,但是无法像最长连续子序列那样来处理。 在 问题中,我们维护了 ,那么我们在这个问题中,也维护一个 。 因为 ,简单来说, 。 因此还要维护 ,当更新 阅读全文
posted @ 2020-05-17 22:41 阳离子 阅读(139) 评论(0) 推荐(0) 编辑
摘要:题目 给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 思路 定义一个数组 代表第一个字符串前i个字符转换为第二个字符串前j个字符串所需要的缩少操作数。 如果wor 阅读全文
posted @ 2020-02-28 11:54 阳离子 阅读(164) 评论(0) 推荐(0) 编辑
摘要:Given a sequence of K integers { N 1, N 2, ..., N K }. A continuous subsequence is defined to be { N i , N i +1, ..., N j } where 1≤ i ≤ j ≤ K . The M 阅读全文
posted @ 2020-02-16 22:21 阳离子 阅读(196) 评论(0) 推荐(0) 编辑
摘要:问题描述 小明喜欢在一个围棋网站上找别人在线对弈。这个网站上所有注册用户都有一个积分,代表他的围棋水平。 小明发现网站的自动对局系统在匹配对手时,只会将积分差恰好是K的两名用户匹配在一起。如果两人分差小于或大于K,系统都不会将他们匹配。 现在小明知道这个网站总共有N名用户,以及他们的积分分别是A1, 阅读全文
posted @ 2019-05-10 17:35 阳离子 阅读(856) 评论(10) 推荐(0) 编辑
摘要:问题描述M78 星云的一个小时有 n 分钟。大家都知道,手表只有一个按钮可以把当前的数加一。在调分钟的时候,如果当前显示的数是 0 ,那么按一下按钮就会变成 1,再按一次变成 2 。如果当前的数是 n - 1,按一次后会变成 0 。作为强迫症患者,小明一定要把手表的时间调对。如果手表上的时间比当前时间多1,则要按 n - 1 次加一按钮才能调回正确时间。小明想,如果手表可以再添加一个按钮,表示把当... 阅读全文
posted @ 2019-05-05 14:35 阳离子 阅读(408) 评论(0) 推荐(0) 编辑
摘要:问题分析 我们可以把这道题当作一道完全背包问题来求解,把每一个数字当作一个阶段,每个数字可以选择多次。 不知道完全背包问题的可以参考,这一篇。 我们设d[ i ][ i ]为数字i拆分方法数。 我们可以写出状态转移方程 \[d[i][j] = \sum\limits_{j - k*i > = 0} 阅读全文
posted @ 2019-03-23 16:51 阳离子 阅读(307) 评论(0) 推荐(0) 编辑
摘要:01背包问题问题描述 有n种物品,每种只有一个,第 i 种 物品的体积为Vi ,重量为 Wi。选一些物品装到一个容量为C的背包,使得总体积不超C的情况下,重量尽量大。问题分析这个问题可以把每一件物品视作一次决策,每次决策只有选与不选两种选择。我们设d[ i ][ j ]为第1件物品到第 i 件物品,放到载重为 j 的背包中的最大价值。因此状态转移方程为\[d[i][j] = \max (d[i -... 阅读全文
posted @ 2019-03-23 16:13 阳离子 阅读(1203) 评论(0) 推荐(0) 编辑
摘要:生命之树在X森林里,上帝创建了生命之树。他给每棵树的每个节点(叶子也称为一个节点)上,都标了一个整数,代表这个点的和谐值。上帝要在这棵树内选出一个非空节点集S,使得对于S中的任意两个点a,b,都存在一个点列 {a, v1, v2, ..., vk, b} 使得这个点列中的每个点都是S里面的元素,且序列中相邻两个点间有一条边相连。在这个前提下,上帝要使得S中的点所对应的整数的和尽量大。这个最大的和就... 阅读全文
posted @ 2019-03-22 18:19 阳离子 阅读(524) 评论(0) 推荐(0) 编辑
摘要:题目描述给定一个数列,包含N个整数,求这个序列的最长上升子序列。例如 2 5 3 4 1 7 6 最长上升子序列为 4.1.O(n2)算法解析看到这个题,大家的直觉肯定都是要用动态规划来做,那么我们先设立一个数组。设d[ i ]为以a[ i ]为结尾的最大子序列的长度有了这个后,我们可以很容易的写出状态转移方程:d[ i ] = max(d[ i ] , d[ j ] + 1) 若 j a[ j... 阅读全文
posted @ 2019-03-19 14:09 阳离子 阅读(198) 评论(0) 推荐(0) 编辑
摘要:问题描述 给出一个字符串S,求S的最长回文子串的长度 题目分析 这道题可以用动态规划来做。 第一步:设d[ i ][ j ] 为来表示 s[ i ] 到 s[ j ]所表示的字符串是否是回文串,是则为1,不是则为0 第二步:寻找状态转移方程 1.若s[ i ] == s[ j ] ,则 s[ i ] 阅读全文
posted @ 2019-03-02 11:52 阳离子 阅读(175) 评论(0) 推荐(0) 编辑
摘要:问题描述 妈妈给小B买了N块糖!但是她不允许小B直接吃掉。 假设当前有M块糖,小B每次可以拿P块糖,其中P是M的一个不大于根号下M的质因数。这时,妈妈就会在小B拿了P块糖以后再从糖堆里拿走P块糖。然后小B就可以接着拿糖。 现在小B希望知道最多可以拿多少糖。 输入格式 一个整数N 输出格式 最多可以拿 阅读全文
posted @ 2019-03-01 12:29 阳离子 阅读(138) 评论(0) 推荐(0) 编辑
摘要:问题描述 在一条直线上有n堆石子,每堆有一定的数量,每次可以将两堆相邻的石子合并,合并后放在两堆的中间位置,合并的费用为两堆石子的总数。求把所有石子合并成一堆的最小花费。 输入格式 输入第一行包含一个整数n,表示石子的堆数。 接下来一行,包含n个整数,按顺序给出每堆石子的大小 。 输出格式 输出一个 阅读全文
posted @ 2019-03-01 12:22 阳离子 阅读(1006) 评论(0) 推荐(0) 编辑
摘要:问题描述有一棵 n 个节点的树,树上每个节点都有一个正整数权值。如果一个点被选择了,那么在树上和它相邻的点都不能被选择。求选出的点的权值和最大是多少?输入格式第一行包含一个整数 n 。接下来的一行包含 n 个正整数,第 i 个正整数代表点 i 的权值。接下来一共 n-1 行,每行描述树上的一条边。输出格式输出一个整数,代表选出的点的权值和的最大值。样例输入51 2 3 4 51 21 32 42 ... 阅读全文
posted @ 2019-02-27 18:35 阳离子 阅读(143) 评论(0) 推荐(0) 编辑
摘要:我们在解决动态规划问题的时候,往往不会很轻松的写出递推方程。这时候我们需要考虑一下是否需要借鉴"多阶段决策问题"。 https://www.cnblogs.com/woxiaosade/p/10346052.html 上面的这道“硬币问题”的题目,如果将每一枚硬币的数目改成1,那原先的递推方程就很难 阅读全文
posted @ 2019-02-03 16:42 阳离子 阅读(1045) 评论(0) 推荐(0) 编辑
摘要:d (i, j) = a(i, j) + max(d(i + 1, j ), d(i + 1, j + 1) ) 阅读全文
posted @ 2019-02-01 15:40 阳离子 阅读(141) 评论(0) 推荐(0) 编辑
摘要:问题描述: 有n种硬币,币值分别是V1 ..... Vn,每种都有无限多。给定给负整数S,可以选用多少个硬币,使得面值之和恰为S。输出硬币数目的最小值和最大值。 1 <= n <= 100, 0 <= s <= 10000 题目分析: 本题可以看作是DAG上的路径问题,起点为S,重点为0,设d[ i 阅读全文
posted @ 2019-02-01 15:38 阳离子 阅读(305) 评论(0) 推荐(0) 编辑
摘要:题目描述: 有n个矩形,每个矩形可以用两个整数来描述,表示它的长与宽。矩形X(a, b) 可以嵌套在矩形 Y(c, d) 中,当且仅当 a < c, b< d 或者 b < c, a < d (矩阵可以旋转90度)。你的任务是选出尽可能多的矩阵排成一行,使得每一个矩形(除最后一个矩阵)都可以嵌套在后 阅读全文
posted @ 2019-01-29 22:29 阳离子 阅读(593) 评论(0) 推荐(0) 编辑
摘要:问题描述 给定一个n*m的矩阵A,求A中的一个非空子矩阵,使这个子矩阵中的元素和最大。 其中,A的子矩阵指在A中行和列均连续的一块。 输入格式 输入的第一行包含两个整数n, m,分别表示矩阵A的行数和列数。 接下来n行,每行m个整数,表示矩阵A。 输出格式 输出一行,包含一个整数,表示A中最大的子矩 阅读全文
posted @ 2019-01-28 23:07 阳离子 阅读(373) 评论(0) 推荐(0) 编辑
摘要:1.最大字段和问题 求一个序列最大连续子序列之和。 例如序列[-1,-2,-3,4,5,-6]的最大子段和为4 + 5 = 9。 ①枚举法 ②动态规划 解题思路: 第一步:设b[ j ] 为 1到 j 的最大连续子序列之和。 第二步:因为b[ j ] 为以a[ j ]结尾的最大连续子序列之和,因此有 阅读全文
posted @ 2019-01-28 23:00 阳离子 阅读(2530) 评论(0) 推荐(0) 编辑
摘要:问题描述 (图3.1-1)示出了一个数字三角形。 请编一个程序计算从顶至底的某处的一条路 径,使该路径所经过的数字的总和最大。 ●每一步可沿左斜线向下或右斜线向下走; ●1<三角形行数≤100; ●三角形中的数字为整数0,1,…99; . 输入格式 文件中首先读到的是三角形的行数。 接下来描述整个三 阅读全文
posted @ 2019-01-19 16:09 阳离子 阅读(119) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示