虽然教材上说斐波那契数列用递归来计算效率很低,因为重复计算次数太多,不过如果将结果保存起来,使用记忆化的思想,还是可以使用递归计算斐波那契的
代码如下public class 斐波那契记忆递归
{
static int n=150;
static int[] mem=new int[n+1];
public static void main(String[] args)
{
//将第...
分类:
其他好文 时间:
2014-12-20 16:59:13
阅读次数:
303
10.1.2.1 C# 和 F# 中可重用的记忆化
如果看一下清单 10.3 中建立 add 值的代码,可以发现,它并不真正知道加法,只是使用了 addSimple 函数,因此,也可以处理其他任何函数。为了使代码更通用,我们可以把这个函数改成参数。
我们要写一个函数(C# 中叫方法),参数为函数,返回这个函数的记忆化版本。参数值是做实际工作的函数,返回的函数增加了缓存功能。清单 10.4...
10.1.2 使用记忆化缓存结果
记忆化(Memoization),可以描述为缓存函数调用的结果,听起来可能有点复杂,但是,技术非常简单。正如我们前面提到的那样,在函数式编程中,大多数函数是没有副作用的,因此,如果我们用相同的参数值,两次调用同一个函数,得到的结果相同。
如果我们要得到与上一次相同的结果,为什么还要麻烦去再一次执行函数呢?相反,我们可以缓存这个结果。如果我们把第一次调用的...
分类:
其他好文 时间:
2014-12-18 17:02:59
阅读次数:
192
题意:
给一个n个点的DAG,每个点有一个值p,现在要在图上找一个入度为0到出度为0的路径,使路径上的点的p值和最大。
分析:
dp[v]记录以点v为起点能获得的最大值,搜一遍即可。
代码:
//poj 3249
//sep9
#include
using namespace std;
const int maxN=100024;
const int maxM=1000024;
int...
分类:
其他好文 时间:
2014-12-15 20:26:17
阅读次数:
117
类似于前两天做的那个wordstack。状压的其实有时候爆搜+记忆化也差不多。
就是这个是要与之前的都重合,移位预处理要注意。
理解好第一个样例就行
/* ***********************************************
Author :bingone
Created Time :2014/12/9 22:48:56
File Name ...
分类:
其他好文 时间:
2014-12-12 00:05:26
阅读次数:
185
这题 to[i][j] 为第i个人送j这个礼物的概率 我们用13进制进行压缩这个留下的的礼物的个数,这样我们将dp[i][k]表示为当第i个人放完礼物后得到的状态为k时的概率,那么通过记忆化搜索我们就得到了我们想要的状态概率即 dp[i][k]+={dp[i+1][k-aj]*to[i][aj]},...
分类:
其他好文 时间:
2014-12-06 18:11:32
阅读次数:
178
题意:举个例子,就跟DOTA里的狼BB一样,自身有攻击力,还有光环可以提升同伴的攻击力,狼站成一排,光环只能提供给相邻的狼,打掉一直狼需要打一下,同时它也会打一下,这样你的扣血量其实就等于该狼的攻击力
方程很好想,dp[i][j]代表 打掉区间[i,j]内的狼所需最少血量,这里是闭区间,后来看到是200*200 ,那么就懒得去想方程转移了,直接记忆化搜索就可以了,注意点是 一个狼被宰了,...
分类:
其他好文 时间:
2014-12-05 22:48:39
阅读次数:
188
题意为给出总石子数n,和m堆石子,两个人轮着取石子,每次只能从总石子中取m堆中的一堆的个数的石子,取走最后一个石子的胜。S先取,O后取。
用博弈的输赢观念+dp就可以了,由于记忆化搜索会爆栈,那就递推了,索性还好推……
不然就不会了……
#include
#include
#include
#include
#include
#include
#include
#includ...
分类:
其他好文 时间:
2014-12-04 20:02:40
阅读次数:
246
题意:每条信息说明了两个一定不在一个集合里的人,求最少情况集合可以划分为多少子集。
一看就是拓补树的最高层数,但题意中隐含了可能有环(>=关系偏序),所以要先缩点,再拓补。当然,缩点之后图中没有环,直接dfs记忆化也是ok的。
代码:
#include
#include
#include
#include
#include
#include
#include
#include
#define...
分类:
其他好文 时间:
2014-12-02 13:35:14
阅读次数:
145
题目:有一个类似跳棋的游戏,一共有12个位置'o'代表棋子'-'代表空位,
'oo-'可以转化成'--o','-oo'可以转化成'o--',给你初始状态,问最后,至少剩下几个棋子。
分析:dp,记忆化搜索,位运算。利用搜索在相邻状态间dp即可。
每个状态的最优解为他能转化所有状态中的最优解。
因为,一共有2^12 = ...
分类:
其他好文 时间:
2014-12-02 06:47:07
阅读次数:
235