fork download
  1. import java.util.*;
  2. import java.io.*;
  3. /*
  4. visit는 아닌 것 같아;;
  5. */
  6. public class Main
  7. {
  8. static int r , c;
  9. static int[] dr = {-1,1,0,0};
  10. static int[] dc = {0,0,-1,1};
  11. static int[][] dp;
  12. static int[][] map;
  13.  
  14. public static void main (String[] args) throws IOException
  15. {
  16. StringTokenizer st = new StringTokenizer(br.readLine());
  17.  
  18. r = Integer.parseInt(st.nextToken());
  19. c = Integer.parseInt(st.nextToken());
  20. map = new int[r][c];
  21. dp = new int[r][c];
  22.  
  23. for(int i = 0 ; i < r ; i++)
  24. {
  25. st = new StringTokenizer(br.readLine());
  26. for(int j = 0 ; j < c ; j++)
  27. {
  28. map[i][j] = Integer.parseInt(st.nextToken());
  29. }
  30. }
  31.  
  32. for(int i = 0 ; i < r ; i++)
  33. {
  34. for(int j = 0 ; j < c ; j++)
  35. {
  36. dp[i][j] = -1;
  37. }
  38. }
  39.  
  40. System.out.println(dfs(0,0));
  41.  
  42. for(int i = 0 ; i < r ; i++)
  43. {
  44. for(int j = 0 ; j < c ; j++)
  45. {
  46. System.out.print(dp[i][j]+" ");
  47. }
  48. System.out.println();
  49. }
  50. System.out.println();
  51. }
  52. public static int dfs(int nr , int nc)
  53. {
  54. if(nr == r-1 && nc == c-1) return 1;
  55.  
  56. if(dp[nr][nc] != -1) return dp[nr][nc];
  57.  
  58. dp[nr][nc] = 0;
  59. for(int i = 0 ; i < 4 ; i++)
  60. {
  61. int mr = nr + dr[i];
  62. int mc = nc + dc[i];
  63.  
  64. if(mr >= 0 && mc >= 0 && mr < r && mc < c)
  65. {
  66. if(map[mr][mc] < map[nr][nc])
  67. {
  68. dp[nr][nc] += dfs(mr,mc);
  69. }
  70. }
  71. }
  72.  
  73. return dp[nr][nc];
  74. }
  75. }
Success #stdin #stdout 0.16s 49088KB
stdin
4 5
50 45 37 32 30
35 50 40 20 25
30 30 25 17 28
27 24 22 15 10
stdout
3
3 2 2 2 1 
1 -1 -1 1 1 
1 -1 -1 1 -1 
1 1 1 1 -1