Zadanie króliki (Fibonacci)

0

Siemanko, mam problem z zadaniem króliki na "sprawdzarce" - adjule.

Agnieszka dowiedziała się ostatnio, skąd wziął się ciąg Fibonacciego. Mianowicie, uczony rozważał teoretyczny eksperyment dotyczący szybkości rozmnażania się stada królików przy następujących założeniach:

  • na początku mamy jedną nowo narodzoną parę królików
  • każda nowa para staje się płodna po miesiącu życia
  • każda płodna para ma co miesiąc jedną parę potomstwa
  • króliki są nieśmiertelne.
    Wartość F(n) oznacza po prostu liczbę par królików po n miesiącach.
    Agnieszka zastanawia się teraz, jakie byłoby rozwiązanie analogicznego zagadnienia w przypadku gdyby każda para królików stawała się płodna dopiero po dwóch miesiącach, ale za to miała co miesiąc dwie nowe pary potomstwa.

Wejście

W pierwszej linii wejścia znajduje się jedna liczba całkowita t<=5 oznaczająca liczbę testów.
W kolejnych liniach znajdują się poszczególne testy. Każdy z nich składa się z jednej liczby całkowitej n (0<=n<=30).

Wyjście

Dla każdego testu wypisz w osobnej linii liczbę par królików otrzymanych po n miesiącach w eksperymencie Agnieszki.

Przykład

Wejście:
4
0
1
3
4

Wyjście:
1
1
3
5

 #include <iostream>
using namespace std;

int A(int n)
{
	if(n<=1)
        return 1;
	else
    {
       return A(n-2)+(2*A(n-3));
    }
}
int main() {

int t, n, i;
cin >> t;
for(i=1; i<=t; i++)
{
    cin >> n;
    cout << A(n) << endl;

}
return 0;
}

Sprawdzarka nie chce tego przyjąć, a zastosowanie A(n-1)+A(n-2) odrzuca "zły wynik", pomimo tego, że wynik jest dobry. Jakieś pomysły?

0

Pomijając poprawność od strony generowanych odpowiedzi, to zdaje się, że Twoja implementacja problemu ma złożoność wykładniczą, a to powoduje timeouty w sprawdzarce i odrzucanie nawet poprawnych odpowiedzi. Poszukaj na YouTubie MIT OpenCourseware i wykładów Erica Demaine, tłumaczył dokładnie to zagadnienie na którymś z nich.

1 użytkowników online, w tym zalogowanych: 0, gości: 1