消除方块,同色可以消除,产生价值 (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;
    }
 }
 
 
 

 

posted on 2023-03-02 01:15  towboat  阅读(11)  评论(0)    收藏  举报