神奇
查看原帖
神奇
892084
xinxin2022楼主2024/7/17 17:39

检查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;
}
2024/7/17 17:39
加载中...