算法
文章平均质量分 77
烽火前秦路
厚积薄发,知识改变命运!
展开
-
动态规划----最长公共子序列LCS
1、基本概念 一个给定序列的子序列就是该给定序列中去掉零个或者多个元素的序列。形式化来讲就是:给定一个序列X={x1,x2,……,xm},另外一个序列Z={z1、z2、……,zk},如果存在X的一个严格递增小标序列,使得对所有j=1,2,……k,有xij = zj,则Z是X的子序列。例如:Z={B,C,D,B}是X={A,B,C,B,D,A,B}的一个子序列,相应的小标为。从定义可以看出原创 2016-08-28 18:08:01 · 707 阅读 · 0 评论 -
动态规划----切割钢条
动态规划方法通常用来求解最优化问题。动态规划算法设计步骤:刻画一个最优解的结构特征。递归定义最优解的值。计算最优解的值,通常采用自底向上的方法。利用计算出的信息构造一个最优解。带备忘的自顶向下法:此方法仍按自然的递归形式编写过程,但过程会保存每个子问题的解(通常保存在一个数组或散列表中)。当需要一个子问题的解时,过程首先检查是否已经保存过此解。如果是,则直接返回保存的值原创 2016-08-24 13:00:05 · 456 阅读 · 0 评论 -
动态规划----费氏数列
我们熟悉的费氏数列也是典型的动态规划的问题。方法一:首先用我们常用的递归方法求解:#include#include#includeusing namespace std;int F1(int n){ if (n == 1) return 1; if (n == 2) return 1; return F1(n - 1) + F1(n - 2);}原创 2016-08-24 13:25:00 · 637 阅读 · 0 评论 -
动态规划----Minimum Path Sum
问题描述:Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which minimizes the sum of all numbers along its path.Note: You can only move either down or r原创 2016-08-24 19:18:10 · 477 阅读 · 0 评论 -
动态规划----Triangle
问题描述:Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent numbers on the row below.For example, given the following triangle[ [2],原创 2016-08-24 19:24:21 · 571 阅读 · 0 评论 -
动态规划----硬币问题
问题描述:硬币问题:给你一些面额的硬币,然后给你一个值N,要你求出构成N所需要的最少硬币的数量和方案。分析:这个问题可以尝试用贪心算法去解决,先从面额最大的硬币开始尝试,一直往下找,知道硬币总和为N。但是贪心算法不能保证能够找出解(例如,给,2,3,5,然后N=11)。我们可以换个思路,我们用d(i)表示求总和为i的最少硬币数量(其实就是动态规划中的“状态”),那么怎么从前面的状态(并原创 2016-08-24 20:12:59 · 747 阅读 · 0 评论 -
动态规划----颜料涂墙问题
问题描述:有一面长度为n(n0代表红色,1代表绿色,2代表蓝色初始值F(1, 0) = F(1, 1) = F(1, 2) = 1;状态转移方程:for(n>1)F(n, 0) = F(n-1, 0)+F(n-1, 1)+F(n-1, 2)F(n, 1) = F(n-1, 1)+F(n-1, 2)F(n, 0) = F(n-1,原创 2016-08-25 10:42:07 · 2754 阅读 · 0 评论 -
动态规划----Maximun Subarray
问题描述:Find the contiguous subarray within an array (containing at least one number) which has the largest sum.For example, given the array [-2,1,-3,4,-1,2,1,-5,4],the contiguous subarray [4,-1,2,原创 2016-08-24 19:29:14 · 391 阅读 · 0 评论