Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <algorithm>
- #include <cstdint>
- #include <iostream>
- #include <vector>
- using namespace std;
- std::int64_t fun(std::vector<std::int64_t> s, std::int64_t i = 0, bool canJump = true) {
- if (i == s.size()) return 1;
- if (i > s.size()) return 0;
- if ((s.at(i) == 2 || s.at(i) == 1) && canJump && (i + 1 < s.size()) &&
- (s.at(i + 1) <= 6)) {
- return fun(s, i + 1) + fun(s, i + 2);
- }
- return fun(s, i + 1);
- }
- std::int64_t funDP(std::vector<std::int64_t> s) {
- std::vector<std::int64_t> DP(s.size() + 2);
- DP.at(0) = 1;
- for (std::int64_t i = 0; i < s.size(); i++) {
- DP.at(i + 1) = DP.at(i + 1) ? DP.at(i + 1) : DP.at(i);
- if (s.at(i) == 1 ||
- (s.at(i) == 2 && (i + 1 < s.size()) && s.at(i + 1) <= 6)) {
- // std::cout << "DGB " << DP.at(i) << " " << DP.at(i + 1) << "\n";
- DP.at(i + 2) = DP.at(i) + DP.at(i + 1);
- }
- }
- return DP.at(s.size());
- }
- int main() {
- vector<std::int64_t> V{2, 2, 2, 1};
- string s;
- do {
- cin >> s;
- if (s == "0") break;
- vector<std::int64_t> s_c;
- s_c.reserve(s.size());
- for (char c : s) {
- s_c.push_back(static_cast<std::int64_t>(c) - '0');
- }
- std::cout << funDP(s_c) << std::endl;
- } while (s != "0");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement