解题思路:直接根据题意求,每求出一个数,就去算当前为止最大的那个数。很easy的一道题,当时给自己增加信心。
源码附上:
#include <iostream>
#include <algorithm>
using namespace std;
long long A[100001];
long long MAX[100001];
void init()
{
long long n = 2;
A[0] = 1; A[1] = 1;
MAX[0]=MAX[1]=1;
while (n<100001)
{
if (n % 2 == 0)
{
A[n] = A[n / 2];
}
else
{
A[n] = A[n / 2] + A[n / 2 + 1];
}
MAX[n] = max(MAX[n - 1], A[n]);
n++;
}
}
int main()
{
init();
long long T;
cin >> T;
long long i,j;
for (i = 0; i<T; i++)
{
long long m;
cin >> m;
cout << MAX[m] << endl;
}
return 0;
}