比赛 2025暑期集训第4场 评测结果 AAAAAAAAAA
题目名称 方块消除 最终得分 100
用户昵称 wdsjl 运行时间 1.439 s
代码语言 C++ 内存使用 26.48 MiB
提交时间 2025-07-05 09:51:52
显示代码纯文本
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int INF=1e9;
const int N = 250;

int n;
int col[N],nxt[N],hd[N];
int dp[N][N][N];

int Dfs(int i,int j,int k)
{
	if(i>j)return 0;
	if(dp[i][j][k])return dp[i][j][k];
	dp[i][j][k]=max(dp[i][j][k],Dfs(i,j-1,0)+(k+1)*(k+1));
	for(int p=nxt[j];p>=i;p=nxt[p])
		dp[i][j][k]=max(dp[i][j][k],Dfs(i,p,k+1)+Dfs(p+1,j-1,0));
	return dp[i][j][k];
}

signed main(){
	freopen("eliminate.in","r",stdin);
	freopen("eliminate.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<=n;++i){
		scanf("%d",&col[i]);
		nxt[i]=hd[col[i]];
		hd[col[i]]=i;
	}
	printf("%lld\n",Dfs(1,n,0));
	return 0;
}