Advertisement
Guest User

Untitled

a guest
Dec 13th, 2019
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.43 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include <vector>
  4. #include <climits>
  5. #include <string>
  6.  
  7. using namespace std;
  8.  
  9. void printVector(vector<vector<int>> arr){
  10.     for (int i = 0; i < arr.size(); i++){
  11.         for (int j = 0; j < arr[i].size(); j++){
  12.             cout << arr[i][j] << " ";
  13.         }
  14.         cout << endl;
  15.     }
  16. }
  17.  
  18. int main(int argc, const char * argv[]) {
  19.     int n, m, x = INT_MAX, y = INT_MAX;
  20.     cin >> n >> m;
  21.     vector<vector<int>> matrix(n); //едреный ввод
  22.     for (int i = 0; i < n; i++){
  23.         for (int j = 0; j < m; j++){
  24.             string temp;
  25.             cin >> temp;
  26.             if (temp == "S"){
  27.                 x = i;
  28.                 y = j;
  29.                 matrix[i-x].push_back(0);
  30.             }
  31.             else if ((i >=  x) && (j >= y)){
  32.                 matrix[i-x].push_back(stoi(temp));
  33.             }
  34.         }
  35.     }
  36.     for (int i = matrix.size() - 1; i > 0; i--){
  37.         if (matrix[i].empty()){
  38.             matrix.erase(matrix.begin() + i);
  39.         }
  40.     }
  41.     //printVector(matrix);
  42.     //cout << matrix.size() << " " << matrix[0].size() << endl;;
  43.     vector<vector<int>> s_matrix (matrix.size(), vector<int>(matrix[0].size()));
  44.     //printVector(s_matrix);
  45.     for (int j = 1; j < matrix[0].size(); j++){
  46.         s_matrix[0][j] = s_matrix[0][j-1] + matrix[0][j];
  47.     }
  48.     for (int i = 1; i < matrix.size(); i++){
  49.         s_matrix[i][0] = s_matrix[i-1][0] + matrix[i][0];
  50.         for (int j = 1; j < matrix[0].size(); j++){
  51.             s_matrix[i][j] = max(matrix[i][j]+s_matrix[i-1][j], matrix[i][j]+s_matrix[i][j-1]);
  52.         }
  53.     }
  54.     int coins =  s_matrix[s_matrix.size() -1][s_matrix[0].size() - 1], i = s_matrix.size()-1, j = s_matrix[0].size()-1;
  55.     vector<int> xi;
  56.     vector<int> yj;
  57.     xi.push_back(i);
  58.     yj.push_back(j);
  59.     cout << "Path:" << endl;
  60.     while (i!=0|| j!=0){
  61.         //cout << "(" << i+x << "," <<j+y <<") ";
  62.         if (i == 0){
  63.             j--;
  64.         }
  65.         else if (j == 0){
  66.             i--;
  67.         }
  68.         else if (s_matrix[i-1][j] >= s_matrix[i][j-1]){
  69.             i--;
  70.         }
  71.         else {
  72.             j--;
  73.         }
  74.         xi.push_back(i);
  75.         yj.push_back(j);
  76.        
  77.     }
  78.     reverse(xi.begin(), xi.end());
  79.     reverse(yj.begin(), yj.end());
  80.     for (int i = 0; i < xi.size(); i++){
  81.         cout << "(" << xi[i] + x << "," <<yj[i] + y <<") ";
  82.     }
  83.     cout << "\nCoins: " << coins;
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement