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