使用备忘录模式(Memoization Pattern)提高性能
这个模式说白了,就是将需要进行大量计算的结果缓存起来,然后在下次需要的时候直接取得就好了。因此,底层只需要使用一个Map就够了。
但是需要注意的是,只有一组参数对应得到的是同一个值时,该模式才有用武之地。
在很多算法中,典型的比如分治法,动态规划(Dynamic Programming)等算法中,这个模式运用的十分...
分类:
编程语言 时间:
2014-10-30 10:23:31
阅读次数:
207
Traveling Salesman Problem Description: Time Limit: 4sec Memory Limit:256MB 有编号1到N的N个城市,问从1号城市出发,遍历完所有的城市并最后停留在N号城市的...
分类:
其他好文 时间:
2014-10-29 18:49:23
阅读次数:
201
题意:
出一些独立的陆地,每片陆地上有很多怪物,杀掉每个怪物都需要一定的时间,并能获得一定的金钱,给出指定的金钱m, 求最少要多少时间可以得到m金钱,仅能选择一个陆地进行杀怪。
题解:
这题,如果不管数据范围,很容易想到对每片陆地求一次0-1背包(dp(i, j) = min(dp(i-1, j), dp[i-1, j-money] + time), i 为金钱),然后在所有陆地中找出最少的...
分类:
其他好文 时间:
2014-10-29 17:14:26
阅读次数:
132
Common Subsequence
Time Limit: 1000MS
Memory Limit: 10000K
Total Submissions: 39128
Accepted: 15770
Description
A subsequence of a given sequence is the given seque...
分类:
其他好文 时间:
2014-10-29 17:06:06
阅读次数:
261
题目大意:给定一个祖玛序列,任选颜色射♂出珠子,问最少射♂出多少珠子
输入法最近越来越奇怪了0.0
据说数据有误 但其实MS问题不大
首先我们把连续相同的珠子都缩在一起 令f[i][j]表示从i开始的j个珠子的最小消除次数
初值 f[i][1]=cnt[i]==1?2:1
然后对于每个区间,我们枚举中间点,拆成两半求和
如果这个区间两端点颜色相同,我们还可以把中间消掉,然后两边再补射1...
分类:
Web程序 时间:
2014-10-29 10:55:59
阅读次数:
308
问题描述:
有people个人和num个,包的容量为m,每个物品都有各自的体积和价值,问当从这n个物品中选择多个物品放在包里而物品体积总数不超过包的容量m时,能够得到的最大价值是多少...
分类:
其他好文 时间:
2014-10-29 00:29:55
阅读次数:
219
题目大意:给定n个连在一起的木棍,分成m+1段,使每段最大值最小,求最大值的最小值及最大值最小时分割的方案数
第一问水爆了……二分答案妥妥秒过
第二问就有些难度了 首先我们令f[i][j]表示用前j个棒♂子得到i段的方案数
诶我没打什么奇怪的符号吧
于是我们有动规方程
f[i][j]=Σf[i-1][k] (sum[j]-sum[k]
这个最坏情况下是O(m*n^2)的,肯定挂
...
分类:
其他好文 时间:
2014-10-28 18:03:25
阅读次数:
178
动态规划法
经常会遇到复杂问题不能简单地分解成几个子问题,而会分解出一系列的子问题。简单地采用把大问题分解成子问题,并综合子问题的解导出大问题的解的方法,问题求解耗时会按问题规模呈幂级数增加(分治思想,递归方法。往往会由于数据大导致递归层次过多而超时或爆栈,即使采用记忆化等优化策略,仍然可能解决不了问题)。...
分类:
其他好文 时间:
2014-10-28 17:46:42
阅读次数:
302
分治,即分而治之,把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。...
分类:
编程语言 时间:
2014-10-28 15:33:02
阅读次数:
194
动态规划法和分治法类似,它也是将大问题分解成子问题求解,求最优解,不同的是,如果分解的子问题有很多是相同的,采用分治法相同的子问题会求解多次,很影响效率;动态规划法呢,它会保存已解决的子问题的答案,再有相同的子问题直接用保存的答案就行了,节省了很多计算时间。...
分类:
编程语言 时间:
2014-10-28 15:32:58
阅读次数:
172