前言
果然DP还是做少了
一做这种就发现啥也不会
传送门 :
思路
枚举答案的每一天链
CODE
void solve()
{
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i][1]>>a[i][2]>>a[i][3];
int ans =0 ;
for(int i=1;i<=4;i++)
{
memset(f,0,sizeof f);
for(int j=1;j<=4;j++)
f[1][i] = -INF;
if(i == 1)
f[1][i] = a[1][1];
if(i == 2)
f[1][i] = a[1][2];
if(i == 3)
f[1][i] = a[1][2];
if(i == 4)
f[1][i] = a[1][3];
for(int j =2;j<=n;j++)
{
f[j][1] = max(f[j-1][2],f[j-1][4]) + a[j][1];
f[j][2] = f[j-1][1]+a[j][2];
f[j][3] = f[j-1][4]+a[j][2];
f[j][4] = max(f[j-1][1],f[j-1][3])+a[j][3];
}
if(i == 1)
ans = max(f[n][2],max(ans,f[n][4]));
if(i == 2)
ans = max(ans,f[n][1]);
if(i == 3)
ans = max(ans,f[n][4]);
if(i == 4)
ans = max(f[n][1],max(ans,f[n][3]));
}
cout<<ans<<endl;
}