3827 - C Bombs

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

Cerința

Le Quack vrea să bombardeze un oraș având N bombe numerotate de la 1...N. Dacă el detonează bombă cu valorea i atunci va putea să detoneze doar bombe încă nedetonate cu valori mai mici decât i. În cazul în care nu mai există astfel de bombe , poate detona orice bombă nedetonata. Le Quack va da numărul N și vrea să îi spuneți în câte moduri poate detona toate cele N bombe după regulă descrisă anterior.

Date de intrare

Inputul conține un număr natural n , reprezentând numărul de bombe pe care le are Le Quack.

Date de ieșire

Outputul conține răspunsul modulo 666013.

Restricții și precizări

N ≤ 2000. Pentru teste în valoare de 10p, N ≤ 9. Pentru restul testelor în valoare de 90p, N ≤ 2000. ==Exemplu==: bombs.in

2 bombs.out

2 bombs.in

3 bombs.out

5

Explicație

În primul exemplu, configurațiile posibile sunt: [1 , 2] și [2 , 1]. În al doilea exemplu, configurațiile posibile sunt: [1 , 2 , 3] , [3 , 2 , 1] , [2 , 1 , 3] , [3 , 1 , 2] , [1 , 3 , 2]. Configurația [2 , 3 , 1] nu este bună, deoarece am luat bombă 3 înainte să termin toate bombele cu indici mai mici decât 2, ceea ce contrazice regula lui Le Quack.

Rezolvare

MOD = 666013

def numar_moduri_detonare(n):

   DP = [0] * (n + 1)
   DP[0] = 1
   for i in range(1, n + 1):
       for j in range(i):
           DP[i] = (DP[i] + DP[j]) % MOD
   return DP[n]

if __name__ == "__main__":

   # Citim datele de intrare
   n = int(input())
   # Calculăm rezultatul și afișăm rezultatul
   rezultat = numar_moduri_detonare(n)
   print(rezultat)