记录编号 185986 评测结果 AAAAAAAAAA
题目名称 [Tyvj]方块消除 最终得分 100
用户昵称 Gravatarmikumikumi 是否通过 通过
代码语言 C++ 运行时间 0.399 s
提交时间 2015-09-10 20:29:33 内存使用 35.64 MiB
显示代码纯文本
#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
int N,A[210],f[210][210][210],tot=0,B[210];
int ans=0;
int t(int b)
{
	return b*b;
}
int DP(int x,int y,int p)
{
	if(y<x) return 0;
	if(f[x][y][p]) return f[x][y][p];
	if(x==y)
	{
		f[x][y][p]=t(B[x]+p);
		return f[x][y][p];
	}
	f[x][y][p]=DP(x,y-1,0)+t(B[y]+p);
	for(int i=x;i<y;i++) 
	{
		if(A[i]==A[y])
			f[x][y][p]=max(f[x][y][p],DP(x,i,p+B[y])+DP(i+1,y-1,0));
	}
	return f[x][y][p];
}
int main()
{
	freopen("eliminate.in","r",stdin);
	freopen("eliminate.out","w",stdout);
	scanf("%d",&N);
	int now=-1;
	int a;
	for(int i=1;i<=N;i++)
	{
		scanf("%d",&a);
		if(a!=now) {tot++;now=a;A[tot]=a;}
		B[tot]++;
	}
	//for(int i=1;i<=tot;i++) cout<<A[i]<<endl;
	int ans=DP(1,tot,0);
	printf("%d",ans);
	return 0;
}