
动态规划
文章平均质量分 77
a_yingxuexin
目前在天津大学读研究生,希望能和大家一起努力,共同见证成长。
展开
-
最少硬币问题
假设有3种不同的硬币,币值分别是CoinValue[] = {1, 2, 5},每一种硬币的数量是有限的,分别是CoinNum[] = {3, 3, 3},给定一个数值target=18,找出一种硬币数最少的方法, 输出最少的硬币数。 思路:我们考虑用动态规划解决这个问题,动态规划的基本宗旨是:无后效性,他只能利用先前的知识来推导出后面的知识。最重要的是要有状态转移方 程。我们可以把大问题化为小转载 2016-07-12 08:27:48 · 796 阅读 · 0 评论 -
硬币组合
假设我们有8种不同面值的硬币{1,2,5,10,20,50,100,200},用这些硬币组合够成一个给定的数值n。例如n=200,那么一种可能的组合方式为 200 = 3 * 1 + 1*2 + 1*5 + 2*20 + 1 * 50 + 1 * 100. 问总过有多少种可能的组合方式? (这道题目来自著名编程网站ProjectEuler, 点击这里查看原题目) 类似的题目还有: [转载 2016-07-12 09:20:56 · 671 阅读 · 0 评论 -
LCS(最长公共子序列)
最长公共子序列的问题可以转化为动态规划来求解,其中,状态转移方程为: 当xi = yj时,dp[i][j] = dp[i-1][j-1]+1; 当xi != yj时,dp[i][j]=max{dp[i-1][j],dp[i][j-1]}. 其中dp[i][j]表示字符串xi和字符串yj所具有的最长公共子序列的长度。 代码中,用回溯法,求解字符串序列(逆序的形式)。 package Pai转载 2016-07-13 08:44:16 · 369 阅读 · 0 评论 -
LIS(最长递增子序列)
最长递增子序列可以用动态规划的方法,时间复杂度是o(n*n),也可以用二分查找的方法,时间复杂度是o(nlogn)。 首先看二分查找的方法:思路是,顺序插入数据,当插入的数据大于以往的任何值时,插入到最后,若插入的数据不是大于以往的任何值时,首先找到大于要插入数据的一个值,然后,将要插入的数据将该值替换掉。因为找到替换的值的复杂度为o(logn),要进行n次插入,所以时间复杂度是o(nlogn)转载 2016-07-13 08:52:04 · 440 阅读 · 0 评论 -
最大子序列和最大递增子序列
给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ..., Nj },其中 1 例如给定序列{ -2, 11, -4, 13, -5, -2 },其最大连续子序列为{ 11, -4, 13 },最大和 为20。 在今年的数据结构考卷中,要求编写程序得到最大和,现在增加一个要求,即还需要输出该 子序列的第一个和最后一个元素。转载 2016-07-13 09:04:22 · 587 阅读 · 0 评论