今天算法导论看到了《动态规划》一节,以前习题我都是想一下,然后网上参考别人的答案,就过去了,可是第一节的答案偏偏找不到,无奈只好咬着头皮自己做了下,话不多说,上代码~~~~~~~~~~~~~~~~
int memorized_Fab_Loop(int n, int *r)
{
if (*(r + n) > 0)
{
return *(r + n);
}
int q = memorized_Fab_Loop(n - 1, r) + memorized_Fab_Loop(n - 2, r);
*(r + n) = q;
return q;
}
int memorized_Fab(int n)
{
int *r = new int[n + 1]();
r[0] = 1;
r[1] = 1;
return memorized_Fab_Loop(n, r);
}
int botom_up_Fab(int n)
{
int *r = new int[n + 1]();
r[0] = 1;
r[1] = 1;
for (int j = 2; j <= n; j++)
{
r[j] = r[j - 1] + r[j - 2];
}
return r[n];
}
动态规划的两种方法都实现了,第二种方法明显是O(n),但是第一个我只想到了方法,分析需要后面的摊还分析的知识,这个我只是略微懂一些,就不献丑了。
PS:这是我的第一篇CSDN博客,欢迎光临!!!!!(QQ:591995637)