Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.68/25: Рейтинг темы: голосов - 25, средняя оценка - 4.68
0 / 0 / 0
Регистрация: 28.08.2024
Сообщений: 1

Посчитать количество способов, которым ладья может добраться до нижней правой клетки доски

28.08.2024, 06:15. Показов 6107. Ответов 23
Метки с++ (Все метки)

Студворк — интернет-сервис помощи студентам
В верхней левой клетке доски сидит ладья. Она умеет ходить на любое количество клеток вправо и вниз. Необходимо посчитать количество способов, которым эта ладья может добраться до нижней правой клетки доски.

Входные данные:

Входные данные содержат два целых числа n, m (1≤n,m≤100) - количество строк и столбцов в таблице. Таблица может быть прямоугольная.

Выходные данные:
Выведите единственное число k = количество способов добраться до нижней правой клетки.
Решалось через префиксные суммы, но ошибку не найду. Возможно, есть другие способы.
Подскажите, пожалуйста, что не так?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <iostream>
#include <vector>
 
 
int count_rook_ways(int n, int m) {
    // Создаем таблицы для подсчета количества путей и префиксных сумм
    std::vector<std::vector<int>> dp(n, std::vector<int>(m, 0));
    std::vector<std::vector<int>> pr(n, std::vector<int>(m, 0));  // Префиксные суммы по строкам
    std::vector<std::vector<int>> pr2(n, std::vector<int>(m, 0)); // Префиксные суммы по столбцам
 
    // Начальная точка
    dp[0][0] = 1;
    pr[0][0] = 1;
    pr2[0][0] = 1;
 
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < m; ++j) {
            if (i > 0) {
                dp[i][j] += pr[i-1][j];  // Пути из верхней клетки
            }
            if (j > 0) {
                dp[i][j] += pr2[i][j-1];  // Пути из левой клетки
            }
 
            // Обновляем префиксные суммы
            pr[i][j] = dp[i][j] + (i > 0 ? pr[i-1][j] : 0);
            pr2[i][j] = dp[i][j] + (j > 0 ? pr2[i][j-1] : 0);
        }
    }
 
    return dp[n-1][m-1];
}
 
int main() {
    int n, m;
    std::cin >> n >> m;
 
    // Вывод результата
    std::cout << count_rook_ways(n, m) << std::endl;
 
    return 0;
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.08.2024, 06:15
Ответы с готовыми решениями:

Выяснить можно ли составить такие пары чисел, чтобы они обозначали поля шахматной доски, по которым может ходить ладья
Нет времени сильно углубляться. Буду премного благодарен,если поясните с примерами и с подробным пояснением Сами задача ниже Даны...

Клетчатая доска - Определить количество способов добраться до последней клетки N-M
Привет. Задача такая: дана клетчатая доска NxM (-1000 &lt;= N,M &lt;= 1000), мы находимся в самой первой клетке 1-1. Нужно определить количество...

Определить, за какое наименьшее количество ходов конь сможет добраться с клетки (x1,y1) доски M×N на клетку (x2,y2)
задача на коня олимпидная с++ решите на с++ пожалуйста. (p,q) - конь Ограничение времени 1 секунда Ограничение памяти 64Mb ...

23
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13235 / 6867 / 1827
Регистрация: 18.10.2014
Сообщений: 17,400
28.08.2024, 22:17
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
я получаю такое же значение и по своей формуле
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <cassert>
#include <algorithm>
#include <iostream>
#include <boost/multiprecision/cpp_int.hpp>
 
using boost::multiprecision::cpp_int;
 
cpp_int Cnk(unsigned n, unsigned k)
{
  assert(n >= k);
 
  if (n == 0)
    return 1;
 
  cpp_int num = 1;
  for (unsigned f = n; f > k; --f)
    num *= f;
    
  cpp_int den = 1;
  for (unsigned f = n - k; f > 1; --f)
    den *= f;
    
  return num / den;
} 
 
cpp_int count_rook_ways(unsigned n, unsigned m)
{
  assert(n > 0 && m > 0);
 
  if (n > m)
    std::swap(n, m);
 
  if (m == 1)
    return 1;
 
  cpp_int res = 0;
 
  if (n == 1)
    for (unsigned j = 1; j < m; ++j)
      res += Cnk(m - 2, j - 1);
  else
    for (unsigned i = 1; i < n; ++i)
      for (unsigned j = 1; j < m; ++j)
        res += Cnk(n - 2, i - 1) * Cnk(m - 2, j - 1) * Cnk(i + j, j);
 
  return res;
}
 
int main() 
{
  unsigned n = 0, m = 0;
  std::cin >> n >> m;
  std::cout << count_rook_ways(n, m) << std::endl;
}
1
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6341 / 3075 / 1064
Регистрация: 01.06.2021
Сообщений: 11,849
28.08.2024, 22:21
TheCalligrapher, ваша формула и код ТС выдают одно и то же
0
 Аватар для Mr_den
12 / 10 / 2
Регистрация: 06.09.2022
Сообщений: 436
30.08.2024, 15:38
за 1 ход: только 1 способ
иЛИ ТАКИЕ СПОСОБЫ ТОЖЕ СЧИТАТЬ ?
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
31.08.2024, 08:26
Цитата Сообщение от Mr_den Посмотреть сообщение
иЛИ ТАКИЕ СПОСОБЫ ТОЖЕ СЧИТАТЬ ?
Фигура не может ходить вверх, я для кого объяснял ?
Ах да, это было лично для Royal_X, больше никого это не касается, понятно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.08.2024, 08:26

Посчитать количество различных комбинаций прыжков, которые помогут добраться из нулевой клетки в клетку n
Задание: Кузнечик прыгает по клеточкам тетрадного листа, за один прыжок он перепрыгивает от L до R клеток. Посчитать количество различных...

Определить количество способов которыми заяц может добраться до вершины лестницы
Задали задание в школе. Я, конечно, понимаю, что надо использовать динамическое программирование, но до меня очень долго доходит решение. ...

Найти количество способов, которыми фишка может дойти до последней клетки
Фишка может двигаться по полю длины N только вперед. Длина хода фишки не более K. Найти количество способов, которыми фишка может дойти до...

Определить количество валунов к которым четвёртый кот может добраться строго быстрее других котов
Кот Бенедикт любит наблюдать из окна за происходящим в парке. На одном из газонов парка устроили инсталляцию из камней. Мелкие камни...

Получить количество возможных уникальных путей, по которым робот может добраться до нижнего правого угла
На сетке m x n стоит робот. Робот изначально расположен в верхнем левом углу (т. е. grid). Робот пытается переместиться в нижний правый...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru