为啥WA了三个点?
#include<bits/stdc++.h>
using namespace std;
int n,zj[100005][5][2],sum;
struct p{
int a,b,c;
}a[100005];
int dfs(int k,int gd,bool ds){int th=0;
if(zj[k][gd][ds])return zj[k][gd][ds];if(k==n+1)return 0;
if(ds){
if(2>gd)th=max(th,dfs(k+1,2,false)+a[k].b);
if(3>gd)th=max(th,dfs(k+1,3,false)+a[k].c);
}
else{
if(2<gd)th=max(th,dfs(k+1,2,true)+a[k].b);
if(1<gd)th=max(th,dfs(k+1,1,true)+a[k].a);
}
zj[k][gd][ds]=th;
return th;
}
int dd(int x,int y){
if(x==1)return a[y].a;
if(x==2)return a[y].b;
return a[y].c;
}
int main(){
cin>>n;for(int i=1;i<=n;i++)cin>>a[i].a>>a[i].b>>a[i].c;
for(int i=1;i<=3;i++)
for(int j=1;j<=3;j++){memset(zj,0,sizeof(zj));
if(i<j)sum=max(sum,dfs(3,j,false)+dd(i,1)+dd(j,2));
memset(zj,0,sizeof(zj));
if(i>j)sum=max(sum,dfs(3,j,true)+dd(i,1)+dd(j,2));
}
cout<<sum;
return 0;
}