摘要: 动态规划的思维其实就是递推的思维,而记忆型递归擅长解决重叠子问题不重复求解。 动态规划用于解决多阶段决策最优化问题 三要素:阶段 状态 决策。 两个条件:最优子结构(最优化原理),无后效性:当前状态是前面状态的完美总结 动规解题的一般思路: 是否可以用动态规划,否则用搜索。 模型匹配:多做经典题目, 阅读全文
posted @ 2019-02-13 18:39 |旧市拾荒| 阅读(292) 评论(0) 推荐(0)
摘要: 题目: 输出最长递增子序列的长度,如输入 4 2 3 1 5 6,输出 4 (因为 2 3 5 6组成了最长递增子序列)。 暴力破解法:这种方法很简单,两层for循环搞定,时间复杂度是O(N2)。 动态规划:之前我们使用动态规划去解决一般是创建一维数组或者二维数组来构建出dp表,利用之前的历史上dp 阅读全文
posted @ 2019-02-13 17:50 |旧市拾荒| 阅读(1514) 评论(1) 推荐(0)
摘要: 问题描述: 有n个重量和价值分别为wi,vi的物品,从这些物品中挑选出总重量不超过W的物品,求所有挑选方案中价值总和的最大值。1≤n≤100,1≤wi,vi≤100,1≤W≤10000。注意:物品的数量是无限的,可以无限拿取。 在前面学习的基础上,其实这道题目并不难,首先普通的动规思路,在前面的01 阅读全文
posted @ 2019-02-13 15:21 |旧市拾荒| 阅读(1095) 评论(0) 推荐(0)
摘要: 题目: 求解两个字符串的最长公共子序列。如 AB34C 和 A1BC2 则最长公共子序列为 ABC。 思路分析:可以用dfs深搜,这里使用到了前面没有见到过的双重循环递归。也可以使用动态规划,在建表的时候一定要注意初始化以及在发现规律的时候一定要想怎么利用前面已经算过的结果来得到现在的结果,或者利用 阅读全文
posted @ 2019-02-13 14:16 |旧市拾荒| 阅读(291) 评论(0) 推荐(0)
摘要: 题目: 在数字三角形中寻找一条从顶部到底边的路径,使得路径上所经过的数字之和最大。路径上的每一步都只能往左下或 右下走。只需要求出这个最大和即可,不必给出具体路径。三角形的行数大于1小于等于100,数字为 0 - 99。 输入格式: 要求输出最大和。 思路分析: 这里的递归和记忆型递归都很容易理解, 阅读全文
posted @ 2019-02-13 11:37 |旧市拾荒| 阅读(2334) 评论(0) 推荐(0)
摘要: 动态规划通常用于解决最优化问题,在这类问题中,通过做出一组选择来达到最优解。在做出每个选择的同时,通常会生成与原问题形式相同的子问题。当多于一个选择子集都生成相同的子问题时,动态规划技术通常就会很有效,其关键技术就是对每个这样的子问题都保存其解,当其重复出现时即可避免重复求解。做动态规划的题目新手一 阅读全文
posted @ 2019-02-13 10:25 |旧市拾荒| 阅读(684) 评论(0) 推荐(0)
摘要: 题目: 有n个重量和价值分别为wi,vi的物品,从这些物品中挑选出总重量不超过W的物品,求所有挑选方案中价值总和的最大值。1≤n≤100,1≤wi,vi≤100,1≤W≤10000 输入: 输出: 普通递归型:因为每个物品只有选与不选两种情况,很容易写出递归代码,也可以理解为深搜。简单来说就是选择选 阅读全文
posted @ 2019-02-13 00:56 |旧市拾荒| 阅读(719) 评论(0) 推荐(0)