Загрузка данных


#include <iostream>
using namespace std;

// ============================================================
// ЗАДАЧА 4. КОНЬ (количество способов)
// ============================================================
void task4() {
    int n, m;
    cin >> n >> m;                     // читаем размеры доски

    // Таблица для подсчёта способов (максимальный размер 50)
    int dp[50][50] = {};               // заполняем нулями

    // Стартовая клетка – один способ (уже стоим там)
    dp[0][0] = 1;

    // Обходим все клетки по порядку (сверху вниз, слева направо)
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            // Начальную клетку пропускаем – она уже обработана
            if (i == 0 && j == 0) continue;

            int ways = 0;
            // Проверяем, можно ли прийти из клетки (i-2, j-1)
            if (i >= 2 && j >= 1)
                ways += dp[i-2][j-1];
            // Проверяем, можно ли прийти из клетки (i-1, j-2)
            if (i >= 1 && j >= 2)
                ways += dp[i-1][j-2];

            dp[i][j] = ways;            // запоминаем количество способов для этой клетки
        }
    }

    // Ответ – количество способов попасть в правый нижний угол
    cout << dp[n-1][m-1] << endl;
}

// ============================================================
// ЗАДАЧА 7. ПЛАВНЫЕ ЧИСЛА
// ============================================================
void task7() {
    int n;
    cin >> n;                         // читаем длину числа

    // dp[длина][последняя_цифра] (макс. длина 20, цифры 0..9)
    int dp[21][10] = {};

    // База: для длины 1 – только цифры от 1 до 9 (ведущий ноль не разрешён)
    for (int d = 1; d <= 9; d++)
        dp[1][d] = 1;

    // Заполняем для длин от 2 до n
    for (int len = 2; len <= n; len++) {
        for (int prev = 0; prev <= 9; prev++) {
            // Если нет чисел длины len-1, заканчивающихся на prev, пропускаем
            if (dp[len-1][prev] == 0) continue;
            // Перебираем новую цифру, которая может идти после prev
            for (int new_d = prev - 1; new_d <= prev + 1; new_d++) {
                if (new_d >= 0 && new_d <= 9) {   // проверяем, что цифра допустима
                    dp[len][new_d] += dp[len-1][prev];
                }
            }
        }
    }

    // Суммируем все числа длины n (последняя цифра любая)
    int answer = 0;
    for (int d = 0; d <= 9; d++)
        answer += dp[n][d];

    cout << answer << endl;
}

// ============================================================
// ГЛАВНАЯ ФУНКЦИЯ – выбираем, что запускать
// ============================================================
int main() {
    // Для запуска задачи 4 (конь) раскомментируйте:
    // task4();

    // Для запуска задачи 7 (плавные числа) раскомментируйте:
    // task7();

    return 0;
}