有一行彩色的棋子,每个棋子的颜色是k种颜色之一。你不能改变棋子的顺序,但是可以移走一些棋子。问至少移走多少个石子,才能使得两个同色的石子之间没有其他颜色的棋子? 输入格式: 多组数据,每组数据两行,第一行是两个整数n和k, 1<=n<=100, 1<=k<=5 下一行是n个在[1..k]范围内的正整数,代表每个棋子的颜色。 输出格式: 每组测试数据输出一行包含一个整数,表示至少移走的石子数。 注:可以移走第2个第7个棋子。
package com.bluecup.org;
import java.util.Arrays;
import java.util.Scanner;
public class Piece {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan = new Scanner(System.in);
String str = scan.next();
int f[][] = new int[str.length() + 1][str.length() + 1];
for (int i = 0; i <= str.length(); i++) {
Arrays.fill(f[i], Integer.MAX_VALUE);
}
for (int i = 1; i <= str.length(); i++) {
f[i][i] = 1;
}
for (int i = 1; i < str.length(); i++) {
for (int j = 1; j <= str.length() - i; j++) {
int max = 1 + f[j + 1][i + j];
for (int k = j + 1; k <= i + j; k++)
if (str.charAt(j - 1) == str.charAt(k - 1))
if (max > k - j - 1
+ (k + 1 <= i + j ? f[k + 1][i + j] : 0))
max = k - j - 1
+ (k + 1 <= i + j ? f[k + 1][i + j] : 0);
f[j][i + j] = max;
}
}
System.out.println(f[1][str.length()]);
}
}