Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.*;
- import java.util.*;
- public class floodFill {
- static final boolean stdin = true;
- static final String filename = "";
- static FastScanner br;
- static PrintWriter pw;
- public static void main(String[] args) throws IOException {
- if (stdin) {
- br = new FastScanner();
- pw = new PrintWriter(new OutputStreamWriter(System.out));
- }
- else {
- br = new FastScanner(filename + ".in");
- pw = new PrintWriter(new FileWriter(filename + ".out"));
- }
- X solver = new X();
- solver.solve(br, pw);
- }
- static class X {
- public void solve(FastScanner br, PrintWriter pw) throws IOException {
- int N = br.nextInt();
- int[] a = new int[N];
- for(int i = 0; i < N; i++) {
- a[i] = br.nextInt();
- }
- int[][][] dp = new int[N][N][2]; //dp[i][j][0] = using left, dp[i][j][1] = using right
- for(int i = 0; i < N; i++) {
- for(int j = 0; j < N; j++) {
- dp[i][j][0] = dp[i][j][1] = Integer.MAX_VALUE;
- }
- }
- for(int i = 0; i < N; i++) {
- dp[i][i][0] = dp[i][i][1] = 0;
- }
- for(int l = 1; l <= N; l++) {
- for(int s = 0; s < N; s++) {
- if(s + l >= N) {
- continue;
- }
- if(a[s] == a[s+1]) {
- 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]);
- }
- else if(a[s] == a[s+l]) {
- 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);
- }
- if(a[s+l] == a[s+l-1]) {
- 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));
- }
- else if(a[s+l] == a[s]) {
- 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));
- }
- 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);
- 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);
- }
- }
- pw.println(Math.min(dp[0][N-1][0],dp[0][N-1][1]));
- pw.close();
- }
- }
- //fastscanner class
- public static class FastScanner {
- BufferedReader br;
- StringTokenizer st;
- public FastScanner(String s) {
- try {
- br = new BufferedReader(new FileReader(s));
- } catch (FileNotFoundException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- public FastScanner() {
- br = new BufferedReader(new InputStreamReader(System.in));
- }
- String nextToken() {
- while (st == null || !st.hasMoreElements()) {
- try {
- st = new StringTokenizer(br.readLine());
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- return st.nextToken();
- }
- int nextInt() {
- return Integer.parseInt(nextToken());
- }
- long nextLong() {
- return Long.parseLong(nextToken());
- }
- double nextDouble() {
- return Double.parseDouble(nextToken());
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement