动态规划算法例题

Posted mengjuanjuan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态规划算法例题相关的知识,希望对你有一定的参考价值。

1. 走台阶问题

有n级台阶,一个人每次上一级或者两级,问有多少种走完n级台阶的方法?

方法1:递归

#include <iostream>
using namespace std;

const int N = 100; //假设最多走100级台阶
int result[N]; //保存结果

int step(int n)
{
if(n > 2)
{
result[n] = step(n-1) + step(n-2);
}
return result[n];
}

int main()
{
int n;
cin >> n;
result[1] = 1;
result[2] = 2;
cout << step(n) << endl;
system("pause");
return 0;
}

方法2:自底向上

#include <iostream>
using namespace std;

const int N = 100; //假设最多走100级台阶
int result[N]; //保存结果

int step(int n)
{
for(int i = 3; i <= n; i++)
{
result[i] = result[i-1] + result[i-2];
}
return result[n];
}

int main()
{
int n;
cin >> n;
result[1] = 1;
result[2] = 2;
cout << step(n) << endl;
system("pause");
return 0;
}

2. 求斐波拉契数列Fibonacci

方法1:递归

#include <iostream>
using namespace std;

const int N = 101; //假设最多求到100
int result[N]; //保存结果

int fb(int n)
{
if(n >= 2)
{
result[n] = fb(n-1) + fb(n-2);
}
return result[n];
}

int main()
{
int n;
cin >> n;
result[0] = 0;
result[1] = 1;
cout << fb(n) << endl;
system("pause");
return 0;
}

方法2:自底向上

#include <iostream>
using namespace std;

const int N = 101; //假设最多求到100
int result[N]; //保存结果

int fb(int n)
{
for (int i = 2; i <= n; i++)
{
result[i] = result[i-1] + result[i-2];
}
return result[n];
}

int main()
{
int n;
cin >> n;
result[0] = 0;
result[1] = 1;
cout << fb(n) << endl;
system("pause");
return 0;
}









































































以上是关于动态规划算法例题的主要内容,如果未能解决你的问题,请参考以下文章

算法动态规划DP自学笔记 入门:基本知识+经典例题

算法竞赛入门经典--例题和课后训练(动态规划)

动态规划算法的套路,动态规划入门

Python之动态规划算法

Python算法-动态规划(Dynamic Programming)

关于动态规划算法,哪位可以讲一下自己心得体会?