Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.BufferedWriter;
- import java.io.IOException;
- import java.io.OutputStreamWriter;
- import java.util.Arrays;
- import java.util.Scanner;
- public class Main {
- public static void main(String[] args) throws IOException {
- Scanner scn = new Scanner(System.in);
- BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));
- while(scn.hasNext()){
- int r = scn.nextInt();
- int c = scn.nextInt();
- int[][] w = new int[r][c];
- int[][] dp = new int[r][c+1];
- for(int i = 0; i < r; i++)
- for(int j = 0; j < c; j++)
- w[i][j] = scn.nextInt();
- for(int j = c-1; j >= 0; j--)
- for(int i = 0; i < r; i++)
- dp[i][j] = w[i][j] + Math.min(dp[(i+1)%r][j+1],
- Math.min(dp[i][j+1],
- dp[(i-1+r)%r][j+1]));
- int j = 0, i = 0, cost = dp[0][0];
- for(int k = 0; k < r; k++)
- if(dp[k][0] < dp[i][0])
- i = k;
- int minIndex = i;
- cost = dp[minIndex][0];
- out.write(i+1+"");
- for(;j < c-1; j++){
- cost = dp[i][j]-w[i][j];
- if(i == r-1){
- if(cost == dp[(i+1)%r][j+1])i = (i+1)%r;
- else if(cost == dp[(i-1+r)%r][j+1])i = (i-1+r)%r;
- else if(cost == dp[i][j+1])i = i;
- }else if(i == 0){
- if(cost == dp[i][j+1])i = i;
- else if(cost == dp[(i+1)%r][j+1])i = (i+1)%r;
- else if(cost == dp[(i-1+r)%r][j+1])i = (i-1+r)%r;
- }else{
- if(cost == dp[(i-1+r)%r][j+1])i = (i-1+r)%r;
- else if(cost == dp[i][j+1])i = i;
- else if(cost == dp[(i+1)%r][j+1])i = (i+1)%r;
- }
- out.write(" "+(i+1));
- }
- out.newLine();
- out.write(dp[minIndex][0]+"");
- out.newLine();
- }
- out.close();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement