做线性dp类的题目时,对菲波拉契数列的特殊理解

 

 

#include <iostream>
using namespace std;
const int N = 60;
long long dp[N];
int n;
void show(){
    dp[0]=0;dp[1]=1;
    dp[2]=2;dp[3]=3;dp[4]=4;
    for(int i=5;i<=N;i++){
        dp[i]=dp[i-1]+dp[i-3];//重点
    }
}
int main()
 { 
  show();
     while(cin>>n&&(n!=0)){
         cout<<dp[n]<<endl;
     }
     return 0;
 }

 

 

import  java.util.Scanner; 
public class jieti {
    static int N = 45;
    static int [] dp= new int[N];
	public static void main(String[] args) {
	  Scanner input =new Scanner(System.in);
	  int t = input.nextInt();
	  dp[2]=1;dp[3]=2;
	  for(int i=4;i<N;i++) {
		  dp[i] = dp[i-1]+dp[i-2];//区别
		  
	  }
	  for(int i=1;i<=t;i++) {
		 int n=input.nextInt();
		 System.out.println(dp[n]);
	  }
	 input.close();
	}
	
}

 两个题的来源:http://acm.hdu.edu.cn/showproblem.php?pid=2041  http://acm.hdu.edu.cn/showproblem.php?pid=2018

其中的妙用需自己体会,我是瞎猫碰死耗子。

加油,到老也要热泪盈眶。

 

posted @ 2020-09-02 22:39  嘻嘻嘻ziixi  阅读(179)  评论(0编辑  收藏  举报