मान लीजिए हमारे पास एक संख्या n है। हमें निम्न तरीके से n + 1 लंबाई की एक सरणी A जनरेट करनी है:
- A[0] = 0
- A[1] = 1
- A[2 * i] = A[i] यदि 2 <= 2 * i <= n
- A[2 * i + 1] = A[i] + A[i + 1] यदि 2 <= 2 * i + 1 <= n
अंत में हमें सरणी nums में अधिकतम संख्या ढूंढनी है।
इसलिए, यदि इनपुट है: n = 5, तो आउटपुट 3 होगा क्योंकि:
- A[0] = 0
- A[1] = 1
- A[2] = A[1] = 1
- A[3] = A[1] + A[2] = 1 + 1 = 2
- A[4] = A[2] = 1
- A[5] = A[2] + A[3] = 1 + 2 = 3
- A[6] = A[3] = 2
तो अधिकतम 3 है।
हल करने के चरण
- A := 0 से n तक की एक नई सूची
- A में प्रत्येक तत्व i के लिए:
- यदि i == 0 या i == 1, तो अगले इटरेशन पर जाएं
- अन्यथा यदि i सम है, तो A[i] := A[i // 2]
- अन्यथा, A[i] := A[i // 2] + A[(i // 2) + 1]
- A का अधिकतम तत्व वापस करें
उदाहरण (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))
इनपुट
5
आउटपुट
3