继续抄答案。。
题目链接:http://poj.org/problem?id=3056
import java.util.Scanner;
public class Main12119 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int t = in.nextInt();
while (t-- > 0) {
int n = in.nextInt();
int[] a = new int[n + 1];
int[][] dp = new int[n + 1][n + 1];
for (int i = 1; i <= n; i++) {
a[i] = in.nextInt();
}
for (int r = 1; r < n; r += 2) {//r代表是一个区间内头与尾的间距,因为不能交叉,
//所以两头尾之间相隔的的人数必须为0,2,4..等偶数
for (int i = 1; i <= n - r; i++) {
int j = i + r;
dp[i][j] = dp[i + 1][j - 1];
if (a[i] == a[j])//头尾相等,对数加1
dp[i][j]++;
for (int k = i + 1; k < j; k += 2)//分割的区间也是同样道理
dp[i][j] = Math.max(dp[i][k]+dp[k + 1][j],dp[i][j]);
}
}
System.out.println(dp[1][n]);
}
}
}