消除方块,同色可以消除,产生价值 (len)^2
求最后最大的价值
区间dp
#include <iostream>
#include<queue>
#include <cstring>
#define IOS std::ios::sync_with_stdio(0)
using namespace std;
const int N =203;
int a[N],f[N][N][N],n;
int dfs(int l,int r,int m){
int &t=f[l][r][m];
if(~t) return t;
if(l>r) return t=0;
t=dfs(l,r-1,0)+(1+m)*(1+m);
for(int k=l;k<r;k++){
if(a[k]==a[r])
t=max(t,dfs(l,k,m+1)+dfs(k+1,r-1,0));
}
return t;
}
signed main(){
int tes,cas=0;
cin>>tes;
while(tes--){
cin>>n;
cout<<"Case "<<(++cas)<<": ";
for(int i=1;i<=n;i++) cin>>a[i];
memset(f,-1,sizeof f) ;
cout<<dfs(1,n,0)<<endl;
}
}
浙公网安备 33010602011771号