50pts求调
查看原帖
50pts求调
1232614
www0_0楼主2024/10/11 21:27
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+5;
int n,dp[N][5][5];
int a[N],b[N],c[N],ans;
signed main(){
	cin>>n;
	for(int i=1;i<=n;i++) cin>>a[i]>>b[i]>>c[i];
	for(int k=1;k<=3;k++){
		if(k==1) dp[1][k][1]=dp[1][k][0]=a[1];
		else if(k==2) dp[1][k][1]=dp[1][k][0]=b[1];
		else dp[1][k][1]=dp[1][k][0]=c[1];
		for(int i=2;i<=n;i++){
			dp[i][1][1]=max(dp[i-1][2][2],dp[i-1][3][2])+a[i];
			dp[i][2][1]=dp[i-1][3][2]+b[i];
			dp[i][2][2]=dp[i-1][1][1]+b[i];
			dp[i][3][2]=max(dp[i-1][1][1],dp[i-1][2][1])+c[i];
		}
		if(k==1) ans=max(ans,max(dp[n][2][2],dp[n][3][2]));
		else if(k==2) ans=max(ans,max(dp[n][1][1],dp[n][3][2]));
		else ans=max(ans,max(dp[n][3][1],dp[n][3][1]));
	}
	cout<<ans;
	return 0;
}
2024/10/11 21:27
加载中...