Advertisement
Guest User

Untitled

a guest
Sep 24th, 2017
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.67 KB | None | 0 0
  1. import java.io.BufferedWriter;
  2. import java.io.IOException;
  3. import java.io.OutputStreamWriter;
  4. import java.util.Arrays;
  5. import java.util.Scanner;
  6.  
  7.  
  8. public class Main {
  9.     public static void main(String[] args) throws IOException {
  10.         Scanner scn = new Scanner(System.in);
  11.         BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));
  12.        
  13.         while(scn.hasNext()){
  14.             int r = scn.nextInt();
  15.             int c = scn.nextInt();
  16.            
  17.             int[][] w = new int[r][c];
  18.             int[][] dp = new int[r][c+1];
  19.            
  20.             for(int i = 0; i < r; i++)
  21.                 for(int j = 0; j < c; j++)
  22.                     w[i][j] = scn.nextInt();
  23.            
  24.             for(int j = c-1; j >= 0; j--)
  25.                 for(int i = 0; i < r; i++)
  26.                     dp[i][j] = w[i][j] + Math.min(dp[(i+1)%r][j+1],
  27.                                             Math.min(dp[i][j+1],
  28.                                                         dp[(i-1+r)%r][j+1]));
  29.            
  30.             int j = 0, i = 0, cost = dp[0][0];
  31.             for(int k = 0; k < r; k++)
  32.                 if(dp[k][0] < dp[i][0])
  33.                     i = k;
  34.  
  35.             int minIndex = i;
  36.            
  37.             cost = dp[minIndex][0];
  38.            
  39.             out.write(i+1+"");
  40.             for(;j < c-1; j++){
  41.            
  42.                 cost = dp[i][j]-w[i][j];
  43.                 if(i == r-1){
  44.                     if(cost == dp[(i+1)%r][j+1])i = (i+1)%r;
  45.                     else if(cost == dp[(i-1+r)%r][j+1])i = (i-1+r)%r;
  46.                     else if(cost == dp[i][j+1])i = i;
  47.                 }else if(i == 0){
  48.                     if(cost == dp[i][j+1])i = i;
  49.                     else if(cost == dp[(i+1)%r][j+1])i = (i+1)%r;
  50.                     else if(cost == dp[(i-1+r)%r][j+1])i = (i-1+r)%r;
  51.                 }else{
  52.                     if(cost == dp[(i-1+r)%r][j+1])i = (i-1+r)%r;
  53.                     else if(cost == dp[i][j+1])i = i;
  54.                     else if(cost == dp[(i+1)%r][j+1])i = (i+1)%r;
  55.                 }
  56.                
  57.                 out.write(" "+(i+1));
  58.             }
  59.                
  60.            
  61.             out.newLine();
  62.             out.write(dp[minIndex][0]+"");
  63.             out.newLine();
  64.            
  65.         }
  66.         out.close();
  67.     }
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement