Mirbek

Мышка и зернышки

Dec 28th, 2021
1,275
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.29 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. const int N = 105;
  6.  
  7. int n, m;
  8. int a[N][N], dp[N][N];
  9.  
  10. int main(){
  11.     cin >> n >> m;
  12.  
  13.     for (int i = 1; i <= n; i++) {
  14.         for (int j = 1; j <= m; j++) {
  15.             cin >> a[i][j];
  16.         }
  17.     }
  18.  
  19.     dp[n][1] = a[n][1];
  20.  
  21.     for (int i = n; i >= 1; i--) {
  22.         for (int j = 1; j <= m; j++) {
  23.             if (i == n && j == 1) continue;
  24.             int first_value = 0, second_value = 0;
  25.             if (i + 1 <= n) {
  26.                 first_value = dp[i + 1][j];
  27.             }
  28.             if (j - 1 >= 1) {
  29.                 second_value = dp[i][j - 1];
  30.             }
  31.             dp[i][j] = max(first_value, second_value) + a[i][j];
  32.         }
  33.     }
  34.  
  35.     string path;
  36.     int x = 1, y = m;
  37.  
  38.     while (x != n || y != 1) {
  39. //        cout << x << " " << y << endl;
  40.         int first_value = 0, second_value = 0;
  41.         if (x + 1 <= n) {
  42.             first_value = dp[x + 1][y];
  43.         }
  44.         if (y - 1 >= 1) {
  45.             second_value = dp[x][y - 1];
  46.         }
  47.         if (first_value >= second_value && x + 1 <= n) {
  48.             x++;
  49.             path += 'F';
  50.         } else {
  51.             y--;
  52.             path += 'R';
  53.         }
  54.     }
  55.  
  56.     reverse(path.begin(), path.end());
  57.  
  58.     cout << path << endl;
  59. }
Advertisement
Add Comment
Please, Sign In to add comment