Giả sử ta có số n. Tạo mảng A độ dài n+1:
A[0] = 0A[1] = 1A[2*i] = A[i]nếu2 <= 2*i <= nA[2*i+1] = A[i] + A[i+1]nếu2 <= 2*i+1 <= n
Tìm số lớn nhất trong mảng A.
Ví dụ: n = 5, kết quả 3 vì A = [0,1,1,2,1,3], max = 3.
Giải thuật
A := list(range(0, n+1))- Với mỗi
itrongA:- Nếu
i == 0 or i == 1: continue - Ngược lại nếu
ichẵn:A[i] = A[i//2] - Ngược lại:
A[i] = A[i//2] + A[i//2 + 1]
- Nếu
- Trả về
max(A)
Ví dụ (Python)
def solve(n):
A = list(range(0, n+1))
for i in A:
if i == 0 or i == 1:
continue
elif i % 2 == 0:
A[i] = A[i//2]
else:
A[i] = A[i//2] + A[(i//2) + 1]
return max(A)
n = 5
print(solve(n))
Input
5
Output
3