- 博客(6)
- 资源 (2)
- 收藏
- 关注
原创 动态规划之五:数字三角形
问题:将一个由n行数字组成的三角形,如图所示,设计一个算法,计算出三角形的由顶至底的一条路径,使该路径经过的数字总和最大?图1数字三角形 首先拿到这题,我们第一想法肯定是使用深度优先算法DFS或者广度优先算法BFS,但是使用DFS算法需要遍历所有点,搜索时会重复遍历一些点,导致时间成指数增长。图2重复计算的次数设我们用二维数组map[m][n]来存储数字三角形,把图1转换成实际的存储格...
2018-04-17 16:39:05 272 1
原创 动态规划之三:剪绳子变形之切割杆
问题:现在已知有一个长度为n的切割杆,且1~n长度对应的价值存储在prices[n]数组中,将其进行若干次切割,求其达到的最大价值? 通过问题的叙述我们可以发现,和前一篇讲解的动态规划之二:剪绳子问题很相似,都属于动态规划的内容,因此我们就用动态规划的思想来解决问题。 现在使用形式化语言来描述问题规模的最大价值状态,即f(n)表示长度为n的切割杆的最大价值。prices[n]数...
2018-04-17 10:01:27 402
原创 动态规划之四:最长公共子序列
问题:已知两个序列的长度分别为m、n,求取这两个序列的最长公共子序列LCS(longest common sequence)的长度?示例描述: 输入: 第一行输入两个整数分别为n、m,它们分别代表序列source以及dest 的长度 第二行输入序列source的值 第三行输入序列dest的值 输出: 输出最长子序列的长度。实例:...
2018-04-16 23:21:35 375
原创 动态规划之二:剪绳子问题
问题:现有一根长度为N的绳子,需要你剪成M段,使M段的乘积最大。(其中M、N都为整数,剪成的每段长度也为整数,N已知,M未知)例如 绳子长度N=8 剪成M=3,数值为别为2,3,3,则乘积最大为 2*3*3=18。 当我们遇到一个大规模问题时,总是习惯把问题的规模变小,这样便于分析讨论。我们从最简单的情况进行分析:当绳子的长度N=1时,我们至少需要剪绳子一次,这时乘积为0;当绳子的长度为N=2时,...
2018-04-15 20:58:56 3290 5
原创 动态规划之一:凑钱
动态规划 适用动态规划解决的问题,经分解得到的子问题往往不是互相独立的,通过把原问题分解为相对简单的子问题的的方式求解复杂问题的方法,求解的问题要具备最优子结构性质和重叠子问题性质的基本要素。基本思想:如果给定一个问题,我们可以分解为不同的子问题且能够保存已解决的子问题的答案,而在需要时再找出已求得的答案,这样就可以避免大量的重复计算,从而得到多项式时间算法。为了达到此目的,可以用一个表来...
2018-04-15 15:43:05 3204 2
原创 指针与自增优先级的问题
在我们面试时,经常会有一些关于运算符优先级的题目,今天就给大家展示一个常出现的例子。问题:定义一个数组 int a[10]={1,2,3,4,5,6,7,8,9,0}; int *p=a; 则 cout<<*p++<<endl; C++部分运算符优先级顺序 由此问题我们可以看出来,其想考察的是C++程序设计的运算符的优先级以及后自增的知识点。我们查看优先级表格表格...
2018-04-14 16:23:52 5353 1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人