记录编号 602719 评测结果 AAAAAAAAAA
题目名称 2034.[Tyvj]方块消除 最终得分 100
用户昵称 GravatarRuyi 是否通过 通过
代码语言 C++ 运行时间 0.437 s
提交时间 2025-07-05 15:48:36 内存使用 26.11 MiB
显示代码纯文本
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n,a[202],dp[201][201][201],cnt=1,ans;
vector<pair<int,int> > v;
int dfs(int l,int r,int k){
    if(l>r) return 0;
    if(dp[l][r][k]!=-1) return dp[l][r][k];
    int ans=dfs(l,r-1,0)+(v[r].second+k)*(v[r].second+k);
    for(int i=l;i<r;i++)
    if(v[i].first==v[r].first) ans=max(ans,dfs(l,i,v[r].second+k)+dfs(i+1,r-1,0));
    return dp[l][r][k]=ans;
}
int main(){
    freopen("eliminate.in","r",stdin);
    freopen("eliminate.out","w",stdout);
    cin>>n;
    if(n==0){
        cout<<0<<endl;
        return 0;
    }
    for(int i=0;i<n;i++) cin>>a[i];
    for(int i=0;i<n;i++){
        if(a[i+1]!=a[i]){
            v.push_back({a[i],cnt});
            cnt=1;
        }else cnt++;
    }
    for(int i=0;i<n;i++)
    for(int j=0;j<n;j++)
    for(int k=0;k<n;k++) dp[i][j][k]=-1;
    cout<<dfs(0,v.size()-1,0)<<endl;
    return 0;
}