记录编号 602686 评测结果 AAAAAAAAAA
题目名称 2034.[Tyvj]方块消除 最终得分 100
用户昵称 GravatarHollow07 是否通过 通过
代码语言 C++ 运行时间 0.522 s
提交时间 2025-07-05 14:49:44 内存使用 50.98 MiB
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
#define ll long long

ll n,x,cnt,a[210],b[210],y;
ll ans,f[210][210][210];

ll dfs(ll l,ll r,ll k){
	if(l>r) return 0;
    if(f[l][r][k]!=-1) return f[l][r][k];
    ll res=dfs(l,r-1,0)+(a[r]+k)*(a[r]+k);
    for(int m=l;m<r;m++){
        if(b[m]==b[r]) res=max(res,dfs(l,m,a[r]+k)+dfs(m+1,r-1,0));
    }
    return f[l][r][k]=res;
}

int main(){
	freopen("eliminate.in","r",stdin);
	freopen("eliminate.out","w",stdout);
//	freopen("in.in","r",stdin);
//	freopen("out.out","w",stdout);
	scanf("%lld",&n);
	if(n==0){
        printf("0");
        return 0;
    }
	scanf("%lld",&y);
	a[++cnt]=1;
	b[cnt]=y;
	for (int i=2;i<=n;i++){
		scanf("%lld",&x);
		if (x==y) a[cnt]++;
		else{
			a[++cnt]=1;
			b[cnt]=x;
		}
		y=x;
	}
	for(int i=1;i<=n;i++){
    	for(int j=1;j<=n;j++){
    		for(int k=0;k<=n;k++){
    			f[i][j][k] = -1;
			}
		}
	}
	printf("%lld",dfs(1,cnt,0));
	return 0;
}