WA 第六点
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+1;
int n;
struct tree{
int a,b,c;
}t[N];
struct dp{
int x,y;
}f[6];
signed main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d%d%d",&t[i].a,&t[i].b,&t[i].c);
for(int i=1;i<=n;i++)
{
dp f0=f[0],f1=f[1],f2=f[2],f3=f[3],f4=f[4],f5=f[5];
f[0]=(dp){f2.x+t[i].a,f2.y};
if(f4.x>f5.x) f[1]=(dp){f4.x+t[i].a,f4.y};
else f[1]=(dp){f5.x+t[i].a,f5.y};
if(f0.x>f1.x) f[2]=(dp){f0.x+t[i].b,f0.y};
else f[2]=(dp){f1.x+t[i].b,f1.y};
if(f4.x>f5.x) f[3]=(dp){f4.x+t[i].b,f4.y};
else f[3]=(dp){f5.x+t[i].b,f5.y};
if(f0.x>f1.x) f[4]=(dp){f0.x+t[i].c,f0.y};
else f[4]=(dp){f1.x+t[i].c,f1.y};
f[5]=(dp){f3.x+t[i].c,f3.y};
if(i==1) for(int i=0;i<6;i++) f[i].y=i;
}
int ans=0;
for(int i=0;i<6;i++)
{
if(i==2||i==3)
{
if(f[i].y!=2&&f[i].y!=3)
ans=max(f[i].x,ans);
}
else ans=max(f[i].x,ans);
}
printf("%d",ans);
return 0;
}