目录
目录
前言
题目
DFS
动态规划
前言
过完年回来状态一直就是懒懒散散的,之前想写的年终总结也一直再拖沓。所以,从今天起找回之前的状态,每日的工作计划没完成就不能休息。今天的任务中有两道LeetCode题目,其中一道动态规划的题目稍微难一点,这里记录一下解题过程。
题目
Given a string s and a dictionary of words di...
分类:
其他好文 时间:
2015-03-10 10:26:10
阅读次数:
169
题目传送门做完这题感觉dp像是一些状态在转移,由一个(多个)目前状态推到后一(多)个状态。这个题目的意思是n个人要照相,n个人的年龄为1到n。站成一排,规定最左段是1岁的人,相邻两个人的年龄差不会超过2岁。问有多少总排队方案。解法:第i个人加入所产生的状态可以从第i-1个人加入产生的状态推过来。我们...
分类:
其他好文 时间:
2015-03-09 20:50:38
阅读次数:
146
题目传送门题目大意: 输入一个1到81(9*9)的数字s,求在1到109有多少个数字的数位和等于s。解题思路: 我们很容易知道一位数字等于s的个数。要使一个i位的数字数位和等于s,可以通过一个i-1位的数字后面加上0~9(如果s#include #include #include using na....
分类:
其他好文 时间:
2015-03-09 18:52:33
阅读次数:
128
题目大意:过桥问题
我们考虑利用时间最小的两个人倒运,把时间大的人依次送过去
有两种方式:
1.时间最小的人和时间最大的人过去,然后时间最小的人把火把拿回来
2.时间最小和第二小的两个人过去,然后时间最小的人把火把拿回来;接着时间最大和第二大的两个人过去,时间第二小的人把火把拿回来
为了保证最优 运输应该不外乎这两种形式
那么令f[i]表示当前没有过桥的人还剩i个时的最短时间 DP即可...
分类:
其他好文 时间:
2015-03-09 16:19:52
阅读次数:
129
解决最大连续子序列和的两种方法:分治,动态规划。
分治时间复杂度虽然更高,但我还是写了一遍加深对这种思想的理解:将一个问题分治成若干个小的同样思路的子问题来解决。本题将所求序列等分成左右两个子序列,愿序列的最大子序列和必是左序列最大子序列和,有序列最大子序列和,跨左右子序列最大和三者中的最大者。
动态规划:用dp[i]更新dp[i+1]就行。
分治:
//
// main.cpp
// ...
分类:
其他好文 时间:
2015-03-09 14:33:35
阅读次数:
216
### 题目大意
用r块红色、g块绿色的方块,搭成一个h层(尽可能高)的塔,第i层有i个相同颜色的方块。
问所有可行的方案有多少。
### 解题思路
动态规划
dp(h, r) 表示到h层,已用r块红色的方案数
绿色个数可以通过h,r确定。
dp(h, r) = dp(h-1, r-h) + dp(h-1, r)
明显可以滚动压缩,dp只与之前一次相关,r反向循环避免引用修改过的数据。
dp[r] +...
分类:
其他好文 时间:
2015-03-09 12:53:29
阅读次数:
155
一:简介
(1)记忆化搜索 即 搜索+动态规划数组记录上一层计算结果,避免过多的重复计算
算法上依然是搜索的流程,但是搜索到的一些解用动态规划的那种思想和模式作一些保存;一般说来,动态规划总要遍历所有的状态,而搜索可以排除一些无效状态。更重要的是搜索还可以剪枝,可能剪去大量不必要的状态,因此在空间开销上往往比动态规划要低很多。
记忆化算法在求解的时候还是按着自顶向下的顺序,但是每求解...
分类:
其他好文 时间:
2015-03-08 21:39:18
阅读次数:
276
一:简介
(1)回溯法 又称试探法
回溯法的基本做法是深度优先搜索,是一种组织得井井有条的、能避免不必要重复搜索的穷举式搜索算法;基本思想是:从一条路往前走,能进则进,不能进则退回来,换一条路再试。
适用场景:当遇到某一类问题时,它的问题可以分解,但是又不能得出明确的动态规划或是递归解法,此时可以考虑用回溯法解决此类问题。回溯法的优点在于其程序结构明确,可读性强,易于理解,而且通过对问题的分...
分类:
编程语言 时间:
2015-03-08 15:42:56
阅读次数:
761
基本算法主要分为以下四类:1、子结构类算法:分治算法,贪心法,动态规划子结构问题主要是要知道怎么从子结构问题的解推出现在问题的解,最粗糙的是简单递归,在递归的基础上进行改进就形成了分治、贪心和动态规划。 动态规划本质上只是减少了在递归过程中对子结构问题的重复求解,但是并没有缩小子结构问题的求解空.....
分类:
编程语言 时间:
2015-03-08 15:39:31
阅读次数:
133
第一种:暴力枚举所有的子数组,然后比较选出最大,时间复杂度O(n^2)第二种:分治法,参见算法导论,时间复杂度O(nlogn)第三种:动态规划,时间复杂度O(n)1、A[1..j+1]的最大子数组为:max{A[1..j] , A[i,j+1](10?A[j+1]+K[j]:A[j+1](以A[j+...
分类:
编程语言 时间:
2015-03-08 15:37:45
阅读次数:
156