算法学习—动态规划
此专栏是我学习动态规划的过程以及题目,希望对跟我一样的小白有所帮助
ArchitectDream
good good study,day day up
展开
-
算法学习——动态规划 例题:上台阶问题(java)
动态规划经典例题之上台阶问题:n阶台阶,一个人每次上一级或者两级台阶,问有多少种走完n级台阶的方法 动态规划思路的由来就是 暴力法——>记忆搜索法——>动态规划 我就是按照这个顺序来进行学习的希望对大家有所帮助 先是经典简单的暴力法解决:public class DTGH_UpTaiJie { /* 经典解法:暴力法 ...原创 2018-12-28 21:13:13 · 2207 阅读 · 0 评论 -
算法学习——动态规划 例题:最长公共子序列问题(java)详解过程
package DTGH;/* 最长公共子序列 一个给定序列的子序列是在该序列中删去若千元素后得到的序列 给定两个序列X和Y ,当另一-序列Z既是X的子序列又是Y的子序列时,称Z是序 列X和Y的公共子序列 最长公共子序列,. X=(A,B,C,B,D,A,B) Y= (B,D,C,A,B, A)●(B,C,B,A)...原创 2019-03-21 21:10:50 · 1077 阅读 · 0 评论 -
算法学习——动态规划 例题:背包问题(java)
题目:一个背包有一定的承重W,用N件物品,每件都有自己的价值,记录在数组V中, 也都有自己的重量,记录在数组W中,每件物品只能选择要装入的背包还是不装入背包 , 要求在不超过背包承重的前提下选出物品的总价值最大动态规划思想:假设物品从1到N,一件一件物品考虑是否加入背包递推关系式: 1) j<w(i) V(i,j)=V(i-1,j) 2) j>=w(i) V(...原创 2018-12-30 16:44:43 · 827 阅读 · 0 评论 -
算法学习——动态规划 例题:矩阵最短路径(java)
给定一个矩阵m,从左上角开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径的和,返回所有的路径中的最小的路径的和。如果给定的m如大家看到的样子,路径1,3,1,0,6,1,0是所有路径中路径和最小的,所以返回12.1 3 5 98 1 3 45 0 6 18 8 4 0思路:式子: m dp1 3 5 9 ...原创 2018-12-28 21:15:06 · 3086 阅读 · 0 评论 -
算法学习——动态规划 例题:找零钱问题(java)
给定数组arr,arr中所有的值都为正数且不重复。每个值代表一种面值的货币,每种面值的货币可以使用任意张,在给定一个整数aim代表要找的钱数,求还钱有多少种方法动态规划:首先我们设一个二维矩阵dp[arr.length][aim+1]dp[i][j]就是arr[0...i]钱组成j的方法种数public class DTGH_ZhaoLingQian { public int...原创 2018-12-29 15:16:32 · 3745 阅读 · 0 评论 -
算法学习——动态规划 例题:最长公共子序列问题(java)
题目:给定两个字符串str1和str2,返回两个字符串的最长公共子序列.例如,str1="1A2C3D4B56",str2="B1D23CA45B6A","123456"或者"12C4B6'动态规划思想:先用一个比,左边加一个字符右面加一个字符依次比较dp[i][j]dp[i][j]意思就是str1从0到i的字符和str2从0到j的公共子序列的个数关系表达式思路:如果str1[...原创 2018-12-30 16:41:07 · 1063 阅读 · 0 评论 -
算法学习——动态规划 例题:两字符串转换权最小问题(java)
题目 :给定两个字符串str1和str2,再给定三个整数ic,dc和rc,分别代表插入, 删除和替换一个字符的代价。返回将str1编辑成str2的最小代价。比如,str1="abc",str2="adc",ic=5,dc=3,rc=2.从"abc"编辑成adc, 吧b替换成d是代价最小的所以返回2.再比如,str1="abc",str2="adc",ic=5,dc=3,rc=100.从abc编...原创 2018-12-31 17:41:03 · 1892 阅读 · 0 评论 -
算法学习——动态规划 例题:最长递增子序列(java)
给定数组arr,返回arr的最长递增子序列长度。比如arr=[2,1,5,3,6,4,8,9,7]最长递增子序列为,[1,3,4,8,9] ,所以返回这个子序列的长度为5,给定数组arr,返回arr的最长所以返回这个子序列的长度。比如arr=[2,1,5,3,6,4,8,9,7]最长递增子序列[1,3,4,8,9],所以返回这个子序列的长度为5arr=[2,1,5,3,6,4,8,9,7...原创 2018-12-29 15:17:56 · 4082 阅读 · 0 评论 -
习题:捡水果(java 动态规划实现)
package lanqiaobei;import java.util.Scanner;/*习题:捡水果蒜头在玩一款游戏,他在一个山顶,现在他要下山,山上有许多水果,蒜头每下一个高度就可以捡起一个水果,并且获得水果的能量。山的形状如图所示: 3 1 2 6 2 33 5 4 1这是一个高度为4的山,数字代表水果的能量。每次下一个高度,蒜头需要选择是往左下走,还是往右下走...原创 2019-03-03 17:57:46 · 522 阅读 · 0 评论 -
习题:杨辉三角(java 动态规划)
package lanqiaobei;import java.util.Scanner;/*习题:杨辉三角杨辉三角是二项式系数在三角形中的一种几何排列。它的每个数等于它上方两数之和,每行数字左右对称,由1 开始逐渐变大。 1 1 1 1 2 1 1 3 3 1 1 4 6 4 11 ...原创 2019-03-01 17:10:59 · 676 阅读 · 0 评论 -
leetcode:139. 单词拆分(java动态规划)
package LeetCode;import java.util.List;/*给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。示例 1:输入: s = "leetcode", wordDict = ["leet", "c...原创 2019-03-07 10:58:35 · 542 阅读 · 0 评论 -
leetcode:买股票最佳时机(java动态规划)
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 注...原创 2019-01-14 19:11:25 · 730 阅读 · 0 评论 -
习题:马踏过河卒(java 动态规划)
package lanqiaobei;import java.util.Scanner;/*习题:马踏过河卒A点有一个过河卒,需要走到目标B点。卒行走规则:可以向下、或者向右。同时在棋盘上的任一点有一个对方的马(如上图的C点),该马所在的点和所有跳跃一步可达的点称为对方马的控制点。例如上图C点上的马可以控制9个点(图中的 P1,P2⋯P8和C)。卒不能通过对方马的控制点。棋盘用...原创 2019-03-01 14:36:46 · 394 阅读 · 0 评论 -
leetcode:解码方法(java动态规划)
package LeetCode;/*一条包含字母 A-Z 的消息通过以下方式进行了编码:'A' -> 1'B' -> 2...'Z' -> 26给定一个只包含数字的非空字符串,请计算解码方法的总数。示例 1:输入: "12"输出: 2解释: 它可以解码为 "AB"(1 2)或者 "L"(12)。示例 2:输入: "226"输出: 3解释: 它可以...原创 2019-01-05 20:03:23 · 555 阅读 · 0 评论 -
leetcode:三角形最小路径和(java动态规划)
package LeetCode;import java.util.ArrayList;import java.util.List;/*给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。例如,给定三角形:[ [2], [3,4], [6,5,7], [4,1,8,3]]自顶向下的最小路径和为 11(即,2 + 3 + ...原创 2019-01-14 19:12:42 · 825 阅读 · 0 评论 -
leetcode:编辑距离(java动态规划)
题目:给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例 1:输入: word1 = "horse", word2 = "ros"输出: 3解释:horse -> rorse (将 'h' 替换为 'r')rorse -> rose...原创 2019-01-12 14:40:18 · 581 阅读 · 0 评论 -
leetcode:不同路径(java动态规划)
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?例如,上图是一个7 x 3 的网格。有多少可能的路径?说明:m 和 n 的值均不超过 100。输入: m = 3, n = 2输出: 3解释:从左上角开始,总共有 3 条...原创 2019-01-05 19:59:24 · 568 阅读 · 0 评论