【力扣】斐波那契数列(动态规划入门)
题目描述

动态规划思路

动态规划中重要的是数组,而不是递归,这是它和回溯的区别。
理解清楚“后续的状态建立在前面的状态之上”是什么意思。
动态规划的过程一般是循环加数组实现的。
本体代码如下:
#include<bits/stdc++.h>
using namespace std;
int fib(int N){
//最基本的情况,也就是动态规划的起始点
if(N < 1){
return N;
}
//定义动态规划数组并对其进行初始化
vector<int> dp(N+1,0);
dp[0] = 0;
dp[1] = 1;
for(int i = 2; i <= N; i++){
dp[i] = dp[i-1] + dp[i-2];
}
return dp[N];
}
int main(){
int n;
cin>> n;
cout<<fib(n);
return 0;
}
对上述代码的改良(虽然并没有必要)
class Solution {
public:
int fib(int N) {
if (N <= 1) return N;
int dp[2];
dp[0] = 0;
dp[1] = 1;
for (int i = 2; i <= N; i++) {
int sum = dp[0] + dp[1];
dp[0] = dp[1];
dp[1] = sum;
}
return dp[1];
}
};

浙公网安备 33010602011771号