您的位置:首页 > 理论基础 > 数据结构算法

数据结构--动态规划

2016-02-05 22:30 302 查看
引入:斐波拉契数列 

1、递归

int fib(int n)
{
return n<2?n:fib(n-1)+fib(n-2);
}

2、记忆化

int a[50]={0};
int fib(int n)
{
if(n<2)
return n;
else
if(a
==0)
return a
=fib(n-1)+fib(n-2);
else
return a
;
}

3、动态规划

int f=0,g=1,n;
while(0<n--){
g=g+f;
f=g-f;
}

eg.上台阶:每步可跨一个或两个台阶,到达第n阶的方案种数

动态规划:颠倒计算方向:由自顶向下递归,为自底向上迭代

formal:最长子序列

1、递归

int LCS(char a[],int n,char b[],int m)
{
if(n==0||m==0)
return 0;
else
{
if(a[n-1]==b[m-1])
return 1+LCS(a,n-1,b,m-1);
else
return max(LCS(a,n-1,b,m),LCS(a,n,b,m-1));
}

}


减而治之

分而治之

2、动态规划
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: