.P1 - Programovanie 1Časový limit: 2s, Pamäťový limit: 64MiBProgramovacie jazyky: Pascal, C, C++, Java, C++0x, Python 3Počet bodov: 1 [ Pošli riešenie ] [ Tvoje riešenia ] [ Správne riešenia ] [ Vzorové riešenie ] Po zvládnutí základov programovania sa vyučujú rôzne techniky programovania - napr. Prehľadávanie s návratom, ako aj Rozdeľuj a panuj. Zvyčajne nasleduje ukážka, že v niektorých prípadoch to nie je efektívne a výpočty sa opakujú. Tu prichádza na scénu memoizácia (dynamické programovanie zhora nadol). Typickou úlohou na memoizáciu býva výpočet Fibonacciho čísla, teda hodnoty v postupnosti 0, 1, 1, 2, 3, 5, 8, 13, ..., kde ďalší prvok je súčtom dvoch predchádzajúcich. Nižšie sú uvedené kódy v jazyku Python na výpočet rekurziou aj memoizáciou. Na lepšiu predstavu zobrazujeme stromy volaní pre N=5: Študentka Dáša bola zvedavá, ako veľmi takáto memoizácia pomáha - teda koľko volaní sa takouto memoizáciou ušetrí. Pomôžte jej to určiť.ÚlohaPre zadanú hodnotu N vypočítajte koľko volaní sa ušetrí použitím uvedenej memoizácie (oproti čisto rekurzívnemu výpočtu) pri výpočte n-tého Fibonacciho čísla. VstupV prvom riadku vstupu je celé číslo T – počet testovacích vstupov. Nasleduje T riadkov, v každom je jedno kladné celé číslo N. .P1
1 ≤ T ≤ 21 VýstupPre každý vstup vypíšte jeden riadok výstupu, obsahujúci počet ušetrených volaní. PríkladVstup:2 5 10 Výstup:6 158 |