100pta 过不了 Subtask 1 。
#include<bits/stdc++.h>
using namespace std;
int c[55],b[55];
int f[51][51][805];
int main(){
int n,s=0;
cin>>n;
for(int i=1;i<=n;i++)cin>>c[i];
for(int i=1;i<=n;i++)cin>>b[i],s+=b[i];
for(int len=1;len<=n;len++){
for(int i=1;i+len-1<=n;i++){
int j=i+len-1;
for(int k=0;k<=s;k++){
f[i][j][k]=max(f[i][j][k],f[i][j-1][0]+(b[j]+k)*(b[j]+k));
}
for(int p=i;p<j-1;p++){
if(c[p]==c[j]){
for(int k=0;k<=s;k++){
f[i][j][k]=max(f[i][j][k],f[i][p][k+b[j]]+f[p+1][j-1][0]);
}
}
}
}
}
cout<<f[1][n][0]<<endl;
return 0;
}