Computer >> Máy Tính >  >> Lập trình >> C ++

Độ dài của dãy con Fibonacci dài nhất trong C ++

Giả sử chúng ta có một chuỗi X_1, X_2, ..., X_n giống fibonacci nếu -

  • n> =3

  • X_i + X_ {i + 1} =X_ {i + 2} cho tất cả i + 2 <=n

Bây giờ, giả sử một dãy A tăng dần các số nguyên dương tạo thành một dãy, chúng ta phải tìm độ dài của dãy con giống fibonacci dài nhất của A. Nếu không tồn tại, thì trả về 0. Vì vậy, nếu số giống như [1,2 , 3,4,5,6,7,8], thì đầu ra sẽ là 5. Dãy con dài nhất là Fibonacci giống như [1,2,3,5,8].

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

Ví dụ

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int lenLongestFibSubseq(vector<int> & A) {
      int ret = 0;
      unordered_map <int, int> m;
      int n = A.size();
      vector < vector <int> > dp(n, vector <int>(n));
      for(int i = 0; i < n; i++){
         m[A[i]] = i;
         for(int j = i - 1; j >= 0; j--){
            int req = A[i] - A[j];
            if(A[i] - A[j] < A[j] && m.count(A[i] - A[j])){
               dp[i][j] = max(dp[i][j], dp[j][m[A[i] - A[j]]] + 1);
            }else{
               dp[i][j] = max(dp[i][j], 2);
            }
            ret = max(ret, dp[i][j]);
         }
      }
      return ret >= 3 ? ret : 0;
   }
};
main(){
   vector<int> v = {1,2,3,4,5,6,7,8};
   Solution ob;
   cout << (ob.lenLongestFibSubseq(v));
}

Đầu vào

[1,2,3,4,5,6,7,8]

Đầu ra

5