P1216 数字三角形 每个节点的值只受左上,右上两节点影响。索引从1开始,避免处理边界问题。 int n,ans,a[1005][1005],dp[1005][1005]; //pull: dp[i][j] = max(dp[i - 1][j - 1], dp[i - 1][j]) + dp[i] ...
分类:
其他好文 时间:
2020-06-21 20:09:12
阅读次数:
61
dp题目整理 背包问题 榨取kkksc03 因为题目中有两个限制条件,所以并不能当做一般背包问题来做, 既然限制条件(类似于"体积")多了一个,那么现在维数也多开一维,同时表示其状态 我们又发现,这个题每种物品(需求)只能取一次,所以这是一道多维0/1背包题目 那么这题就很好做了 #include< ...
分类:
其他好文 时间:
2020-06-21 09:45:42
阅读次数:
35
本来想写完递归再写这个专栏的,但是老师给了一个贪心的题目,没办法只能开一个板块了 简介 在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解。 与这个局部最优解相对应的全局最优解会在动态规划里面展现出来。 例题 先来一道经典的贪心热热 ...
分类:
编程语言 时间:
2020-06-20 18:50:32
阅读次数:
74
【最长公共子序列问题】 问题定义: 输入:X = (x1,x2,...,xm) , Y = (y1,y2,...yn) 输出:公共子序列长度(拓展:如何打印公共子序列) 1. 如何用子问题表示 dp[ i ][ j ]表示X的i前缀与Y的j前缀的最长公共子序列长度 则总问题==dp[ m ][ n ...
分类:
其他好文 时间:
2020-06-20 16:01:12
阅读次数:
52
问题定义: 设计高效算法,求给定输入字符串的最长回文子序列。例如,给定输入character,算法应该返回carac。算法的运行时间是怎样的? 可以将问题中的回文看作前后缀匹配的问题,因此这个问题属于特殊的前缀动态规划的问题 1. 如何用子问题表示 dp[ i ][ j ]表示A[ i…j ]的最长 ...
分类:
其他好文 时间:
2020-06-20 13:47:23
阅读次数:
44
【01背包问题】 1.如何用子问题表示 P[1…n , C]表示总问题 dp[ i ][ j ]表示P[ i…n,j ]的最大价值 则总问题P[1…n , C] = max{ P[2…n , C - v1 ] , P[ 2…n , C] } 2. 优化子结构和重叠子问题 3. 递归表达式 dp[ i ...
分类:
其他好文 时间:
2020-06-19 20:43:27
阅读次数:
78
题目: 数组的每个索引作为一个阶梯,第 i个阶梯对应着一个非负数的体力花费值 cost[i](索引从0开始)。 每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯或者爬两个阶梯。 您需要找到达到楼层顶部的最低花费。在开始时,你可以选择从索引为 0 或 1 的元素作为初始阶梯。 ...
分类:
编程语言 时间:
2020-06-19 14:20:03
阅读次数:
92
1. 2. 参考 https://labuladong.gitbook.io/algo/dong-tai-gui-hua-xi-lie/dong-tai-gui-hua-zhi-kmp-zi-fu-pi-pei-suan-fa ...
分类:
编程语言 时间:
2020-06-17 23:44:44
阅读次数:
110
动态规划思想 注意:子串和子序列的区别 子串一定时连续的,子序列不一定是连续的 首先清楚dp数组的含义 定义:dp[i]表示以nums[i]这个数结尾的最长递增子序列的长度 因为nums[3]=4,最长递增子序列为1,3,4,所以长度为3即dp[3]=3 既然是递增子序列,只要找到前面那些结尾比4小 ...
分类:
其他好文 时间:
2020-06-17 23:36:35
阅读次数:
57
方法:动态规划 class Solution: def minDistance(self, houses: List[int], k: int) -> int: houses.sort() n = len(houses) cost = [[0]*n for _ in range(n)] for i ...
分类:
其他好文 时间:
2020-06-17 20:08:50
阅读次数:
40