fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int main() {
  5. ios::sync_with_stdio(false);
  6. cin.tie(nullptr);
  7.  
  8. int n;
  9. cin >> n;
  10.  
  11. int pole[300001];
  12. for (int i = 0; i <= n; i++) {
  13. cin >> pole[i];
  14. }
  15.  
  16. if (pole[0] == 1 || pole[n] == 1) {
  17. cout << -1 << "\n";
  18. return 0;
  19. }
  20.  
  21. int fib[50];
  22. fib[0] = 1;
  23. fib[1] = 2;
  24. int ilosc = 2;
  25. while (true) {
  26. fib[ilosc] = fib[ilosc - 1] + fib[ilosc - 2];
  27. if (fib[ilosc] > n) break;
  28. ilosc++;
  29. }
  30. int dp[300001];
  31. for (int i = 0; i <= n; i++) dp[i] = -1;
  32. dp[0] = 0;
  33. for (int i = 0; i <= n; i++) {
  34. if (dp[i] == -1) continue;
  35. for (int j = 0; j < ilosc; j++) {
  36. int nastepny = i + fib[j];
  37. if (nastepny <= n && pole[nastepny] == 0) {
  38. if (dp[nastepny] == -1 || dp[nastepny] > dp[i] + 1) {
  39. dp[nastepny] = dp[i] + 1;
  40. }
  41. }
  42. }
  43. }
  44. cout << dp[n] << "\n";
  45. return 0;
  46. }
Success #stdin #stdout 0.01s 5288KB
stdin
12
0 1 1 0 0 1 0 1 1 1 1 0
stdout
3