我蒟蒻qwq
本来想着有没有二维做法,结果这写了个什么鬼
#include<iostream>
using namespace std;
int map[101][101][2],m,n;
int main()
{
cin>>m>>n;
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
cin>>map[i][j][0];
for(int i=1;i<=m;i++)
{
map[1][i][0]+=map[1][i-1][0];
map[i][1][0]+=map[i-1][1][0];
map[1][i][1]=1;
map[i][1][1]=2;
}
for(int i=2;i<=m-1;i++)
for(int j=2;j<=n-1;j++)
{
if(map[i][j][0]+map[i-1][j][0]>map[i][j][0]+map[i][j-1][0])
{
map[i][j][0]+=map[i-1][j][0];
map[i][j][1]=map[i-1][j][1];
}
else
{
map[i][j][0]+=map[i][j-1][0];
map[i][j][1]=map[i][j-1][1];
}
}
for(int i=2;i<m;i++)
{
if(map[i][n-1][1]!=2)
{
map[i][n][0]+=max(map[i-1][n][0],map[i][n-1][0]);
}
else
{
map[i][n][0]+=map[i][n-1][0];
}
}
for(int i=2;i<n;i++)
{
if(map[m][i-1][1]!=1)
{
map[m][i][0]+=max(map[m][i-1][0],map[m-1][i][0]);
}
else
{
map[m][i][0]+=map[m][i-1][0];
}
}
cout<<map[m-1][n][0]+map[m][n-1][0]<<endl;
return 0;
}
码风较丑,抱歉
具体想法就是先在边缘处理半圈,然后再带标记的递推dp过去,但是结果这个蒟蒻写得路线会重叠,求巨佬帮忙喵qwq