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