貪心 斐波那契 演算法題

2021-10-07 18:13:00 字數 969 閱讀 8145

題面

輸入資料只有一組。

第一行只有乙個數字n,代表一共有n根木棍,n<=100000。

第二行為n個數,代表每根木棍的長度。每根木棍的大小不超過1e18。

第三行為乙個數字q,代表詢問數目,q<=100000。

接下來的q行,每一行有兩個數字l和r,代表詢問的區間。其中l和r滿足1<=l<=r<=n。

輸出對於每個詢問,如果可以組成三角形輸出」yes」,否則輸出」no」(不需要加引號)。

輸如樣例

523

34102

1335

輸出樣例
yes

no

分析題目

首先可以知道斐波那契數列數列第i項等於第i-1和第i-2項之和,可以想到的是當項數大於100時,第100項已經超過1e10了。當搜尋的區間長度大於100時,肯定存在這樣的三條邊構成三角形。為什麼?因為斐波那契數列已經是差一點就可以構成三角形了。int 的範圍是有限的,在這有限的區間裡面最壞情況是斐波那契數列,數量超過這個,一定存在滿足構成三角形的三個數。

當個數小於50的時候:

暴力列舉:

當然不是三重迴圈: 可以列舉最大值。看看是否存在乙個三角形包含這條邊,最壞的情況是他前面兩條邊(排好序了)都不能包含,那麼這條一定不被其他邊包含(簡單證明),如果不滿足,移除這一條邊。那麼我們從大到小列舉邊的長度即可。

ac**

#include

#include

#include

#define maxn 1000005

using

namespace std;

int a[maxn]

, b[maxn]

;int n, m;

intjudge

(int l,

int r)

intmain()

return0;

}

斐波那契演算法

其思想與折半查詢 插值查詢沒有多大區別,本質上只是分割點的選擇不同。斐波那契查詢需要構造斐波那契數列,該數列的作用就是提供分割點 好多演算法書都沒有介紹清楚啊!參閱折半查詢 插值查詢以及斐波那契查詢 1 演算法首先找到構造乙個查詢表,即在原來的陣列上新增元素,使得該查詢表 陣列 的長度為某個斐波那契...

斐波那契數列衍生演算法題

假設你正在爬樓梯。需要 n 階你才能到達樓頂。每次你可以爬 1 或 2 個台階。你有多少種不同的方法可以爬到樓頂呢?注意 給定 n 是乙個正整數。首先我們最快想到的實現方式就是遞迴 f 1 1 f 2 2 f n f n 1 f n 2 複製 func climbstairs n int int i...

演算法題 001 斐波那契數列

斐波那契數列的python版本 coding utf 8 斐波那契數列實現 import functools from typing import generator 方法一 使用遞迴 需要快取 functools.lru cache maxsize none def feibo num int i...