51Nod 1062 序列中最大數 打表
阿新 • • 發佈:2018-12-24
有這樣一個序列a:
a[0] = 0
a[1] = 1
a[2i] = a[i]
a[2i+1] = a[i] + a[i+1]
輸入一個數N,求a[0] - a[n]中最大的數。
a[0] = 0, a[1] = 1, a[2] = 1, a[3] = 2, a[4] = 1, a[5] = 3, a[6] = 2, a[7] = 3, a[8] = 1, a[9] = 4, a[10] = 3。
例如:n = 5,最大值是3,n = 10,最大值是4。
收起
輸入
第1行:一個數T,表示後面用作輸入測試的數的數量。(1 <= T <= 10) 第2 - T + 1行:T個數,表示需要計算的n。(1 <= n <= 10^5)
輸出
共T行,每行1個最大值。
輸入樣例
2
5
10
輸出樣例
3
4
打表。。。
程式碼如下:
#include <cstdio> #include <cstring> #include <algorithm> #include <iostream> using namespace std; const int maxn=100005; int t; int a[maxn]; int b[maxn]; int n; void init() { a[0]=0; a[1]=1; b[0]=0; b[1]=1; for (int i=2;i<=maxn-5;i++) { if(i%2==0) { a[i]=a[i/2]; } else { a[i]=a[i/2]+a[(i+1)/2]; } if(a[i]>b[i-1]) { b[i]=a[i]; } else { b[i]=b[i-1]; } } } int main() { init(); scanf("%d",&t); while (t--) { scanf("%d",&n); printf("%d\n",b[n]); } return 0; }