Top.Mail.Ru
Ответы
Аватар пользователя

dmitrii_trusov_363

Дмитрий Трусов
подписчиков

Значения кармы
мнения
знания
истории
Вывести маршрут максимальной стоимости С++

В левом верхнем углу прямоугольной таблицы размером N×M
находится черепашка. В каждой клетке таблицы записано некоторое число. Черепашка может перемещаться вправо или вниз, при этом маршрут черепашки заканчивается в правом нижнем углу таблицы.

Подсчитаем сумму чисел, записанных в клетках, через которую проползла черепашка (включая начальную и конечную клетку). Найдите наибольшее возможное значение этой суммы и маршрут, на котором достигается эта сумма.

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

В первой строке входных данных записаны два натуральных числа N
и M
, не превосходящие 100
— размеры таблицы. Далее идут N
строк, каждая из которых содержит M
чисел, разделённых пробелами — описание таблицы. Все числа в клетках таблицы целые и могут принимать значения от 0
до 100
.

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

Первая строка выходных данных содержит максимальную возможную сумму, вторая — маршрут, на котором достигается эта сумма. Маршрут выводится в виде последовательности, которая должна содержать N−1
букву D, означающую передвижение вниз, и M−1
букву R, означающую передвижение вправо. Если таких последовательностей несколько, необходимо вывести ровно одну (любую) из них.

Примеры
Ввод
5 5
9 9 9 9 9
3 0 0 0 0
9 9 9 9 9
6 6 6 6 8
9 9 9 9 9
Вывод
74
D D R R R R D D
Мой код:


#include <iostream>
#include<vector>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
vector<vector<int>> v(a, vector<int>(b));
vector<vector<int>> d(a, vector<int>(b));
vector<vector<int>> zxc(a, vector<int>(b));
for (int i = 0; i < a; i++) {
for (int j = 0; j < b; j++) {
cin >> v[i][j];
}
}
d[0][0] = v[0][0];
for (int i = 1; i < b; i++) {
d[0][i] = d[0][i - 1] + v[0][i];
}
for (int i = 1; i < a; i++) {
d[i][0] = d[i - 1][0] + v[i][0];
}
zxc[0][0] = v[0][0];
for (int i = 1; i < b; i++) {
zxc[0][i] = zxc[0][i - 1] + v[0][i];
}
for (int i = 1; i < a; i++) {
zxc[i][0] = zxc[i - 1][0] + v[i][0];
}
for (int i = 1; i < a; i++) {
for (int j = 1; j < b; j++) {
d[i][j] = max(d[i - 1][j], d[i][j - 1]) + v[i][j];
}
}
cout << d[a - 1][b - 1] << endl;
for (int i = 1; i < a; i++) {
for (int j = 1; j < b; j++) {
if(zxc[i - 1][j]>zxc[i][j - 1]){
cout << "D" << " ";
}
if(zxc[i][j - 1]>zxc[i - 1][j]){
cout << "R" << " ";
}
}
}
return 0;
}

Выводит

74
D D D D D D R R

Почему?