![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构 动态规划
文章平均质量分 52
温酒知莲华
这个作者很懒,什么都没留下…
展开
-
爬楼梯
有n级台阶,一个人每次上一级或者两级,问有多少种走完n级台阶的方法。为了防止溢出,请将结果Mod 1000000007 给定一个正整数int n,请返回一个数,代表上楼的方式数。保证n小于等于100000。 测试样例: 1 返回:1 class GoUpstairs { public: int countWays(int n) { // 动态规原创 2017-09-08 13:03:28 · 373 阅读 · 0 评论 -
[LintCode]191.乘积最大子序
找出一个序列中乘积最大的连续子序列(至少包含一个数)。 样例 比如, 序列 [2,3,-2,4] 中乘积最大的子序列为 [2,3] ,其乘积为6。 思路:动态规划,每一步只需要记住其前一步的整数最大值和负数的最小值。因为涉及到正负,所以要保存最小值和最大值两种情况,因为负负得正。最小值的比较包括nums[i]、minnums[i] 、maxnums[i],最大值与此相同,其实最大原创 2017-10-01 00:11:20 · 318 阅读 · 0 评论 -
01背包
一个背包有一定的承重cap,有N件物品,每件都有自己的价值,记录在数组v中,也都有自己的重量,记录在数组w中,每件物品只能选择要装入背包还是不装入背包,要求在不超过背包承重的前提下,选出物品的总价值最大。 给定物品的重量w价值v及物品数n和承重cap。请返回最大总价值。 测试样例: [1,2,3],[1,2,3],3,6 返回:6 class Backpa原创 2017-09-09 14:33:58 · 259 阅读 · 0 评论 -
[LintCode]92.背包问题
在n个物品中挑选若干物品装入背包,最多能装多满?假设背包的大小为m,每个物品的大小为A[i] 样例 如果有4个物品[2, 3, 5, 7] 如果背包的大小为11,可以选择[2, 3, 5]装入背包,最多可以装满10的空间。 如果背包的大小为12,可以选择[2, 3, 7]装入背包,最多可以装满12的空间。 函数需要返回最多能装满的空间大小。 思路:使用一维数组原创 2017-09-09 14:33:35 · 767 阅读 · 0 评论 -
最优编辑
对于两个字符串A和B,我们需要进行插入、删除和修改操作将A串变为B串,定义c0,c1,c2分别为三种操作的代价,请设计一个高效算法,求出将A串变为B串所需要的最少代价。 给定两个字符串A和B,及它们的长度和三种操作代价,请返回将A串变为B串所需要的最小代价。保证两串长度均小于等于300,且三种代价值均小于等于100。 测试样例: "abc",3,"adc",3,5,3,100原创 2017-09-08 23:44:47 · 293 阅读 · 0 评论 -
圆中两个点的最大差值 笔试
#include #include #include using namespace std; const double valA = 180.00000000; const double valB = 360.00000000; double caculate(vector & dvec) { int len = dvec.size(); int max = dvec[0]; in原创 2017-09-08 18:20:08 · 347 阅读 · 0 评论 -
LCS(即最长公共子序列)
给定两个字符串A和B,返回两个字符串的最长公共子序列的长度。例如,A="1A2C3D4B56”,B="B1D23CA45B6A”,”123456"或者"12C4B6"都是最长公共子序列。 给定两个字符串A和B,同时给定两个串的长度n和m,请返回最长公共子序列的长度。保证两串长度均小于等于300。 测试样例: "1A2C3D4B56",10,"B1D23CA45B6A",12原创 2017-09-08 15:46:48 · 328 阅读 · 0 评论 -
LIS(即最长上升子序列)
这是一个经典的LIS(即最长上升子序列)问题,请设计一个尽量优的解法求出序列的最长上升子序列的长度。 给定一个序列A及它的长度n(长度小于等于500),请返回LIS的长度。 测试样例: [1,4,2,5,3],5 返回:3 思路:用dp[i]数组来记录以i为结尾的子序列里面包含的最长上升子序列的数字个数。然后从下标为1开始求dp[i],并且记录找到的最大值,即可得到解原创 2017-09-08 15:10:15 · 229 阅读 · 0 评论 -
矩阵最小路径和
有一个矩阵map,它每个格子有一个权值。从左上角的格子开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,返回所有的路径中最小的路径和。 给定一个矩阵map及它的行数n和列数m,请返回最小路径和。保证行列数均小于等于100. 测试样例: [[1,2,3],[1,1,1]],2,3 返回:4 class MinimumPath { pu原创 2017-09-08 13:14:33 · 501 阅读 · 0 评论 -
找零钱
有数组penny,penny中所有的值都为正数且不重复。每个值代表一种面值的货币,每种面值的货币可以使用任意张,再给定一个整数aim(小于等于1000)代表要找的钱数,求换钱有多少种方法。 给定数组penny及它的大小(小于等于50),同时给定一个整数aim,请返回有多少种方法可以凑成aim。 测试样例: [1,2,4],3,3 返回:2 cl原创 2017-09-08 12:24:19 · 275 阅读 · 0 评论