【最长公共子序列问题】 问题定义: 输入: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
思路 用数组下标作为数字,数组元素记录次数 注意事项 声明数组的时候,如果用 int index[10000]; 会出现不为0的随机数 #include<bits/stdc++.h> using namespace std; /* run this program using the console ...
分类:
其他好文 时间:
2020-06-19 20:47:36
阅读次数:
52
【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
对动态规划,做个总结,我们从一个例子开始: 有一座高度是10级台阶的楼梯,从下往上走,每跨一步只能向上1级或者2级台阶。要求用程序来求出一共有多少种走法。 比如,每次走1级台阶,一共走10步,这是其中一种走法。我们可以简写成 1,1,1,1,1,1,1,1,1,1。 再比如,每次走2级台阶,一共走5 ...
分类:
其他好文 时间:
2020-06-16 23:30:48
阅读次数:
58
/** * @Class ClimbStairs * @Description 70、 爬楼梯 * 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 * 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? * 注意:给定 n 是一个正整数。 * <p> * 示例 1: * 输入: ...
分类:
其他好文 时间:
2020-06-16 20:46:28
阅读次数:
72