摘要: ```C++ include include include using namespace std; //最长公共子序列 vector getdp1(string str1, string str2) { vector dp(str1.length(), vector(str2.length()) 阅读全文
posted @ 2017-09-04 14:42 木白的菜园 阅读(138) 评论(0) 推荐(0) 编辑
摘要: 题目 给定两个字符串str1和str2, 长度分别稳M和N,返回两个字符串的最长公共子串 解法一 这是一道经典的动态规划题,可以用M N的二维dp数组求解.dp[i][j]代表以str1[i]和str2[j]当做公共子串结尾的情况下,公共子串能有多长.然后分析可以发现dp[i][j]只与dp[i 1 阅读全文
posted @ 2017-09-04 14:42 木白的菜园 阅读(325) 评论(0) 推荐(0) 编辑
摘要: ```python include include include include using namespace std; //获取最长递增子序列的递增数组 vector getdp1(vector arr) { vector dp(arr.size()); for (int i = 0; i a 阅读全文
posted @ 2017-09-04 14:41 木白的菜园 阅读(146) 评论(0) 推荐(0) 编辑
摘要: 题目三 给定数组arr, arr中所有的值都为整数且不重复.每个值代表一种面值的货币,每种面值的货币可以使用任意张,在给定一个整数aim代表要找的钱数,求换钱有多少种方法. 解法一 暴力递归 用0张arr[0], 让arr[1...N 1]组成剩下的钱,这样的方法数记为res1 用1张arr[0], 阅读全文
posted @ 2017-09-04 13:54 木白的菜园 阅读(506) 评论(0) 推荐(0) 编辑
摘要: 题目一 给定数组arr,数组中有N个元素,其中所有的之都为整数且不重复.每个只代表一种面值的货币,每种面值的货币可以使用任意张,在给定一个整数aim代表要找的钱数,求组成aim的最少货币数. 解法 依然是用二维数组分析的动态规划问题,数组dp长为N行aim 1列.其中dp[i][j]代表用arr[0 阅读全文
posted @ 2017-09-04 13:53 木白的菜园 阅读(451) 评论(0) 推荐(0) 编辑
摘要: 题目 给定一个矩阵m, 从左上角开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的树子累加起来就是路径和,返回所有的路径中最小的路径和. 解法一 这是一道经典的动态规划题,状态转移方程为dp[i][j] = min{dp[i - 1][j], dp[i][j - 1]} + m[i][j 阅读全文
posted @ 2017-09-04 13:47 木白的菜园 阅读(2490) 评论(0) 推荐(0) 编辑