Advertisement
mickypinata

GRD3-T17: Min Cost Path 2

Nov 27th, 2020
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.33 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. typedef pair<int, int> pii;
  5.  
  6. const int mov[3] = {-1, 0, 1};
  7. const int NR = 10;
  8. const int NC = 100;
  9.  
  10. int board[NR + 1][NC + 1], dp[NR + 1][NC + 1], par[NR + 1][NC + 1];
  11. int row, col;
  12.  
  13. int main(){
  14.  
  15.     scanf("%d %d", &row, &col);
  16.     for(int i = 1; i <= row; ++i){
  17.         for(int j = 1; j <= col; ++j){
  18.             scanf("%d", &board[i][j]);
  19.         }
  20.     }
  21.  
  22.     for(int j = col; j >= 1; --j){
  23.         for(int i = 1; i <= row; ++i){
  24.             int mn = 1e9;
  25.             for(int m = 0; m < 3; ++m){
  26.                 int nr = i + mov[m];
  27.                 if(nr == 0){
  28.                     nr = row;
  29.                 } else if(nr == row + 1){
  30.                     nr = 1;
  31.                 }
  32.                 if(dp[nr][j + 1] < mn || (dp[nr][j + 1] == mn && nr < par[i][j])){
  33.                     mn = dp[nr][j + 1];
  34.                     par[i][j] = nr;
  35.                 }
  36.             }
  37.             dp[i][j] = mn + board[i][j];
  38.         }
  39.     }
  40.  
  41.     int mn = 1e9;
  42.     int bestRow = 0;
  43.     for(int i = 1; i <= row; ++i){
  44.         if(dp[i][1] < mn){
  45.             mn = dp[i][1];
  46.             bestRow = i;
  47.         }
  48.     }
  49.  
  50.     int i = bestRow;
  51.     for(int j = 1; j <= col; ++j){
  52.         cout << i << " ";
  53.         i = par[i][j];
  54.     }
  55.     cout << "\n" << mn;
  56.  
  57.     return 0;
  58. }
  59.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement