帮孩子看看吧,90ptsWA#8
查看原帖
帮孩子看看吧,90ptsWA#8
694969
hcy1117楼主2024/8/8 16:14
#include<bits/stdc++.h>
using namespace std;
const int N=1005;
int n,a[N],b[N],c[N];
int dp[N][N][3];
inline int w(int i,int x,int y){
	if(x==2&&!y)return 0;
	if(y==2&&!x)return 2*a[i];
	if(x<y)return 0;
	if(x==y)return a[i];
	return a[i]*2;
}
int main(){
//	freopen("data.txt","r",stdin);
//	freopen("std.txt","w",stdout);
	std::ios::sync_with_stdio(false);
	cin.tie(),cout.tie();
	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++){
				if(i==1||i-1!=j)dp[i][j][k]=dp[i-1][j][k]+w(i,k,c[i]);
				if(j>0)
				    for(int l=0;l<3;l++)
					    dp[i][j][k]=max(dp[i][j][k],dp[i-1][j-1][l]+w(i,k,c[i])-b[j]);
			}
	int ans=0;
	for(int i=0;i<n;i++)
		for(int j=0;j<3;j++)
			ans=max(ans,dp[n][i][j]);
	cout<<ans;
}
2024/8/8 16:14
加载中...