Предмет: Информатика, автор: MaksMega

помогите пж, задача на c++

Вывести маршрут максимальной стоимости

В левом верхнем углу прямоугольной таблицы размером 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
#include
using namespace std;
int main() {
int n, m, ez;
cin>>n>>m;
vector > t(n + 1, vector (m + 1));
vector bestm;
for(int i = 1; i < t.size(); ++i) {
for(int j = 1; j < t[i].size(); ++j) {
cin>>t[i][j];
}
}
vector > d(n + 1,vector (m + 1));
for(int i = 1; i < t.size(); ++i) {
for(int j = 1; j < t[i].size(); ++j) {
d[i][j] = max(d[i-1][j],d[i][j-1]) + t[i][j];
ez = d[i][j];
}
}
cout< = 0; i--) {
if (bestm[i] == 0) {
cout<<"D ";
}
else {
cout<<"R ";
}
}
return 0;
}


ooooor642: ты не понимаешь почему у тебя код не работает или что?

Ответы

Автор ответа: meecapri228
12

Ответ:

#include <iostream>

#include <algorithm>

using namespace std;

int main()

{

int n(0),m(0);

cin >> n >> m;

int matrix[n][m];

char arr[n][m];

arr[0][0] = '0';

for(int i = 0;i<n;++i){

for(int j = 0;j<m;++j){

cin >> matrix[i][j];

if(!i && !j)continue;

if(!i){

matrix[i][j] += matrix[i][j-1];

arr[i][j] = 'R';

}

if(!j){

matrix[i][j] += matrix[i-1][j];

arr[i][j] = 'D';

}

if(i && j){

matrix[i][j] += max(matrix[i-1][j],matrix[i][j-1]);

if(max(matrix[i-1][j],matrix[i][j-1]) == matrix[i-1][j])arr[i][j] = 'D';

else arr[i][j] = 'R';

}

}

}

cout << matrix[n-1][m-1];

cout << "\n";

string s;

for(int i = n-1;;){

for(int j = m-1;;){

if(arr[i][j] == '0'){

reverse(s.begin(),s.end());

s.erase(0,1);

cout << s << endl;

return 0;

}

s.push_back(arr[i][j]);

s.push_back(' ');

if(arr[i][j] == 'R'){

j -= 1;

continue;

}

if(arr[i][j] == 'D'){

i -= 1;

continue;

}

}

}

cout << endl;

return 0;

}

Объяснение:

Похожие вопросы