Advertisement
informaticage

IDM - Alphacode

Jan 16th, 2024
516
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.26 KB | None | 0 0
  1. #include <algorithm>
  2. #include <cstdint>
  3. #include <iostream>
  4. #include <vector>
  5.  
  6. using namespace std;
  7.  
  8. std::int64_t fun(std::vector<std::int64_t> s, std::int64_t i = 0, bool canJump = true) {
  9.   if (i == s.size()) return 1;
  10.   if (i > s.size()) return 0;
  11.  
  12.   if ((s.at(i) == 2 || s.at(i) == 1) && canJump && (i + 1 < s.size()) &&
  13.       (s.at(i + 1) <= 6)) {
  14.     return fun(s, i + 1) + fun(s, i + 2);
  15.   }
  16.  
  17.   return fun(s, i + 1);
  18. }
  19.  
  20. std::int64_t funDP(std::vector<std::int64_t> s) {
  21.   std::vector<std::int64_t> DP(s.size() + 2);
  22.   DP.at(0) = 1;
  23.  
  24.   for (std::int64_t i = 0; i < s.size(); i++) {
  25.     DP.at(i + 1) = DP.at(i + 1) ? DP.at(i + 1) : DP.at(i);
  26.     if (s.at(i) == 1 ||
  27.         (s.at(i) == 2 && (i + 1 < s.size()) && s.at(i + 1) <= 6)) {
  28.       // std::cout << "DGB " << DP.at(i) << " " << DP.at(i + 1) << "\n";
  29.       DP.at(i + 2) = DP.at(i) + DP.at(i + 1);
  30.     }
  31.   }
  32.  
  33.   return DP.at(s.size());
  34. }
  35.  
  36. int main() {
  37.   vector<std::int64_t> V{2, 2, 2, 1};
  38.  
  39.   string s;
  40.  
  41.   do {
  42.     cin >> s;
  43.     if (s == "0") break;
  44.  
  45.     vector<std::int64_t> s_c;
  46.     s_c.reserve(s.size());
  47.  
  48.     for (char c : s) {
  49.       s_c.push_back(static_cast<std::int64_t>(c) - '0');
  50.     }
  51.  
  52.     std::cout << funDP(s_c) << std::endl;
  53.   } while (s != "0");
  54.   return 0;
  55. }
Tags: dp
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement