检查25分钟后竟不知道自己死哪里了
#include<bits/stdc++.h>
using namespace std;
long long dp[1005][1005][3],a[1005],b[1005],c[1005];
long long n,ans;
int main(){
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<n;i++) cin>>b[i];
for(int i=1;i<=n;i++) cin>>c[i];
for(int i=1;i<=n;i++){
for(int j=0;j<i;j++){
for(int k=0;k<3;k++){
dp[i][j][k]=-INT_MAX;
int plus=0;
if((c[i]+1)%3==k) plus=a[i]*2;
else if(c[i]==k) plus=a[i];
if(j<i-1||i==1) dp[i][j][k]=max(dp[i][j][k],dp[i-1][j][k]);
if(j>0) dp[i][j][k]=max(dp[i][j][k],max(dp[i-1][j-1][(k+1)%3],dp[i-1][j-1][(k+2)%3]-b[j]));
dp[i][j][k]+=plus;
//ans=max(ans,dp[i][j][k]);
}
}
}
for(int i=0;i<n;i++){
ans=max(ans,max(dp[n][i][0],max(dp[n][i][1],dp[n][i][2])));
}
cout<<ans;
return 0;
}