求助
查看原帖
求助
696085
ZZ_nyn楼主2024/9/12 20:09
#include <bits/stdc++.h>
using namespace std;
int t,n,a[205],col[205],c[205],len[205],f[205][205][205];
int solve(int l,int r,int k){
	if(f[l][r][k])return f[l][r][k];
	if(l==r)return (len[r]+k)*(len[r]+k);
	f[l][r][k]=solve(l,r-1,0)+(len[r]+k)*(len[r]+k);
	for(int i=l;i<r-1;i++){
		if(c[i]==c[r]){
			f[l][r][k]=max(f[l][r][k],solve(i+1,r-1,0)+solve(l,i,len[r]+k));
		}
	}
	return f[l][r][k];
}
int main(){
	cin>>t;
	for(int i=1;i<=t;i++){
		cin>>n;
		cin>>col[1];
		int len1=1,tot=0;
		for(int i=2;i<=n;i++){
			cin>>col[i];
			if(col[i]!=col[i-1]){
				tot++;
				c[tot]=col[i-1];
				len[tot]=len1;
				len1=1;
			}else len1++;
		}
		if(len1){
			c[++tot]=col[n];
			len[tot]=len1;
		}
		for(int j=1;j<=tot;j++){
			for(int k=1;k<=n;k++){
				f[i][j][k]=(len[j]+k)*(len[j]+k);
			}
		}
		cout<<"Case "<<i<<": "<<solve(1,tot,0)<<endl;
	}
  
  
  为啥第36行的k=1就对,k=0就挂
	return 0;
}
2024/9/12 20:09
加载中...