Advertisement
Guest User

Untitled

a guest
Mar 24th, 2019
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.02 KB | None | 0 0
  1.  
  2. import java.io.*;
  3. import java.util.*;
  4.  
  5. public class floodFill {
  6.  
  7. static final boolean stdin = true;
  8. static final String filename = "";
  9. static FastScanner br;
  10. static PrintWriter pw;
  11.  
  12. public static void main(String[] args) throws IOException {
  13.  
  14. if (stdin) {
  15. br = new FastScanner();
  16. pw = new PrintWriter(new OutputStreamWriter(System.out));
  17. }
  18.  
  19. else {
  20. br = new FastScanner(filename + ".in");
  21. pw = new PrintWriter(new FileWriter(filename + ".out"));
  22. }
  23.  
  24. X solver = new X();
  25. solver.solve(br, pw);
  26. }
  27.  
  28. static class X {
  29. public void solve(FastScanner br, PrintWriter pw) throws IOException {
  30. int N = br.nextInt();
  31.  
  32. int[] a = new int[N];
  33.  
  34. for(int i = 0; i < N; i++) {
  35. a[i] = br.nextInt();
  36. }
  37.  
  38. int[][][] dp = new int[N][N][2]; //dp[i][j][0] = using left, dp[i][j][1] = using right
  39.  
  40. for(int i = 0; i < N; i++) {
  41. for(int j = 0; j < N; j++) {
  42. dp[i][j][0] = dp[i][j][1] = Integer.MAX_VALUE;
  43. }
  44. }
  45.  
  46. for(int i = 0; i < N; i++) {
  47. dp[i][i][0] = dp[i][i][1] = 0;
  48. }
  49.  
  50. for(int l = 1; l <= N; l++) {
  51. for(int s = 0; s < N; s++) {
  52.  
  53. if(s + l >= N) {
  54. continue;
  55. }
  56.  
  57. if(a[s] == a[s+1]) {
  58. dp[s][s+l][0] = Math.min(Math.min(dp[s][s+l][0],dp[s+1][s+l][1]+1),dp[s+1][s+l][0]);
  59. }
  60. else if(a[s] == a[s+l]) {
  61. dp[s][s+l][1] = Math.min(Math.min(dp[s][s+l][1], dp[s][s+l][1]), dp[s][s+l][0]+1);
  62. }
  63. if(a[s+l] == a[s+l-1]) {
  64. dp[s][s+l][1] = Math.min(dp[s][s+l][1], Math.min(dp[s][s+l-1][1], dp[s][s+l-1][0]+1));
  65. }
  66. else if(a[s+l] == a[s]) {
  67. dp[s][s+l][0] = Math.min(dp[s][s+l][0], Math.min(dp[s][s+l-1][0], dp[s][s+l-1][1]+1));
  68. }
  69.  
  70. dp[s][s+l][0] = Math.min(dp[s][s+l][0], (Math.min(dp[s+1][s+l][0], Math.min(dp[s+1][s+l][1], Math.min(dp[s][s+l-1][0], dp[s][s+l-1][1]))))+1);
  71. dp[s][s+l][1] = Math.min(dp[s][s+l][1], Math.min(dp[s+1][s+l][0], Math.min(dp[s+1][s+l][1], Math.min(dp[s][s+l-1][0], dp[s][s+l-1][1])))+1);
  72.  
  73.  
  74. }
  75.  
  76.  
  77. }
  78.  
  79. pw.println(Math.min(dp[0][N-1][0],dp[0][N-1][1]));
  80.  
  81.  
  82. pw.close();
  83. }
  84.  
  85. }
  86.  
  87. //fastscanner class
  88. public static class FastScanner {
  89. BufferedReader br;
  90. StringTokenizer st;
  91.  
  92. public FastScanner(String s) {
  93. try {
  94. br = new BufferedReader(new FileReader(s));
  95. } catch (FileNotFoundException e) {
  96. // TODO Auto-generated catch block
  97. e.printStackTrace();
  98. }
  99. }
  100.  
  101. public FastScanner() {
  102. br = new BufferedReader(new InputStreamReader(System.in));
  103. }
  104.  
  105. String nextToken() {
  106. while (st == null || !st.hasMoreElements()) {
  107. try {
  108. st = new StringTokenizer(br.readLine());
  109. } catch (IOException e) {
  110. // TODO Auto-generated catch block
  111. e.printStackTrace();
  112. }
  113. }
  114. return st.nextToken();
  115. }
  116.  
  117. int nextInt() {
  118. return Integer.parseInt(nextToken());
  119. }
  120.  
  121. long nextLong() {
  122. return Long.parseLong(nextToken());
  123. }
  124.  
  125. double nextDouble() {
  126. return Double.parseDouble(nextToken());
  127. }
  128. }
  129.  
  130. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement