Loading

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

题目描述

image

动态规划思路

image
动态规划中重要的是数组,而不是递归,这是它和回溯的区别。
理解清楚“后续的状态建立在前面的状态之上”是什么意思。
动态规划的过程一般是循环加数组实现的。

本体代码如下:

#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];
    }
};
posted @ 2024-03-11 20:24  SaTsuki26681534  阅读(11)  评论(0)    收藏  举报