摘要:
上一个版本的0-1背包代码的复杂度:时间复杂度O(n*C)空间复杂度O(n*C) 优化思路如下: 0-1背包问题: F(n,C)考虑将n个物品放入背包为C 的背包,使得价值最大。 状态转移方程:F(i,c) = max(F(i-1 , c) , v(i)+ F(i-1, c- w(i) ) 根据状态 阅读全文
摘要:
01背包问题是动态规划中的经典问题。 本篇文章主题:分析与优化最基本的01背包问题,对此类问题解题有一个基本的解题模板。 问题概述: 有一个背包,他的容量为C(Capacity)。现在有n种不同的物品编号分别为0、1....n-1。其中每一件物品的重量为w(i),价值为v(i)。问可以向这个背包中放 阅读全文
摘要:
在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为“根”。 除了“根”之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果两个直接相连的房子在同一天晚上被打劫,房屋将自动 阅读全文
摘要:
你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报 阅读全文
摘要:
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。 示例 1: 示 阅读全文
摘要:
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径? 网格中的障碍物和空位置分别用 1 和 0 阅读全文
摘要:
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 问总共有多少条不同的路径? 例如,上图是一个7 x 3 的网格。有多少可能的路径? 说明:m 和 n 的值均不 阅读全文
摘要:
给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。 示例 1: 示例 2: 自顶向下思考递归方法,我们要将n拆分,可以拆分成一个完全平方数i^2与n-i^2两部分。其中,n-i^2再进行递归求解,而i^2即一个平 阅读全文
摘要:
给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。 示例 1: 示例 2: 说明: 你可以假设 n 不小于 2 且不大于 58。 思路: 继续动态规划,这一题还是蛮有代表性的。从前面几题的前后一对一,二对一,提高到了n对1. 自顶向下的思考:第n 阅读全文
摘要:
给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 示例: 做动态规划的题目还是习惯目的性的思考:找状态转移方程>明确函数定义>确定结果(过程)记录数据结构。 数据结构:既然题目给了一个二维数组记录每一步,那 阅读全文