
动态规划
shizheng163
一步一步向前走
展开
-
动态规划-优化编辑器问题
题目描述:对于两个字符串A和B,我们需要进行插入、删除和修改操作将A串变为B串。定义ic,dc,rc分别为三种操作的代价,请设计一个高效算法,求出将A串变为B串所需要的最少代价。给定两个字符串A和B,及它们的长度和三种操作代价,请返回将A串变为B串所需要的最小代价。保证两串长度均小于等于300.求解过程:生成大小为(N+1)*(M+1)的矩阵dp. dp[x][y]表示A前x...原创 2016-03-26 17:56:44 · 5356 阅读 · 2 评论 -
动态规划-01背包问题
题目描述:一个背包有一定的承重cap.有N件物品,每件都有自己的价值,记录在数组v中,也都有自己的重量,记录在数组w中.每件物品只能选择要装入背包还是不装入背包,要求在不超过背包承重的前提下,选出物品的总价值最大。给定物品的重量w价值v及物品数n和承重cap。请返回最大总价值。求解过程:首先生成N*CAP+1的矩阵dpdp[x][y]的含义为以前X件物品组成的不超过重量y...原创 2016-03-26 17:04:01 · 821 阅读 · 0 评论 -
动态规划-最长公共子序列LCS
题目描述给定两个字符串A和B,返回两个字符串的最长公共子序列的长度。例如,A="1A2C3D4B56",B="B1D23CA45B6A","123456"或者"12C4B6"都是最长公共子序列。给定两个字符串A和B,同时给定两个串的长度n和m,请返回最长公共子序列的长度。求解过程设给定的str1的长度为N,str2的长度为M.生成一个N*M的矩阵dpdp[i][j]的含义为,str1的 子串原创 2018-02-27 22:13:16 · 375 阅读 · 0 评论 -
动态规划-矩阵最小路径和
题目描述有一个矩阵map,它每个格子有一个权值。从左上角的格子开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和。返回所有的路径中最小的路径和。给定一个矩阵map及它的行数n和列数m,请返回最小路径和。求解过程给定一个N*M的矩阵,假定N等于4,M等于41 2 3 44 8 3 26 1 4 57 3 7 8现在生成一个大小为N*M的矩阵dp, dp原创 2018-02-27 22:27:36 · 1375 阅读 · 0 评论 -
动态规划-最长递增子序列
题目描述这是一个经典的LIS(即最长上升子序列)问题,请设计一个尽量优的解法求出序列的最长上升子序列的长度。给定一个序列A及它的长度n,请返回LIS的长度。求解过程给定一个数组A,以及他的长度N生成长度为N的数组dpdp[i]的含义为:必须以A[i]结尾时的最长递增子序列的长度.显然 dp[0]=1;对于i 为1-N-1时, dp[i]为比A[i]小的数结尾的最长的...原创 2018-02-27 22:33:45 · 440 阅读 · 0 评论 -
动态规划-跳台阶
题目描述 有n级台阶,一个人每次上一级或者两级,问有多少种走完n级台阶的方法。为了防止溢出,请将结果Mod 1000000007给定一个正整数int n,请返回一个数,代表上楼的方式数。保证n小于等于100000。代码实现class GoUpstairs {public: int countWays(int n) {//第一次走1台阶,剩下n-1阶,第一次走2台阶,剩下n-2阶 ...原创 2016-03-26 14:44:58 · 1317 阅读 · 0 评论 -
动态规划-找零钱
有数组penny,penny中所有的值都为正数且不重复。 每个值代表一种面值的货币,每种面值的货币可以使用任意张。 再给定一个整数aim(小于等于1000)代表要找的钱数,求换钱有多少种方法。 给定数组penny及它的大小(小于等于50),同时给定一个整数aim,请返回有多少种方法可以凑成aim。class Exchange {public: int count...原创 2016-03-26 14:15:09 · 1198 阅读 · 0 评论