这是代码qwq
#include <bits/stdc++.h>
using namespace std;
const int Maxn = 11;
int Num;
int Tr[Maxn][Maxn];
int Dp1[Maxn][Maxn];
bool UR[Maxn][Maxn];
int Dp2[Maxn][Maxn];
int main()
{
cin >> Num;
while(true)
{
int X,Y,Value;
cin >> X >> Y >> Value;
Tr[X][Y] = Value;
if(Value == 0)
{
break;
}
}
for(int i = 1;i <= Num;i++)
{
Dp1[i][1] = Tr[i - 1][1] + Tr[i][1];
UR[i][1] = false;
Dp1[1][i] = Tr[1][i - 1] + Tr[1][i];
UR[1][i] = true;
}
Dp1[1][1] = Tr[1][1];
for(int i = 2;i <= Num;i++)
{
for(int j = 2;j <= Num;j++)
{
if(Dp1[i][j - 1] >= Dp1[i - 1][j])
{
Dp1[i][j] = Dp1[i][j - 1] + Tr[i][j];
UR[i][j] = true;
}else
{
Dp1[i][j] = Dp1[i - 1][j] + Tr[i][j];
UR[i][j] = false;
}
}
}
for(int i = Num;i >= 1;)
{
int j;
for(j = Num;j >= 1;)
{
if(i < 1)
{
break;
}
if(UR[i][j])
{
Tr[i][j - 1] = 0;
j--;
}else
{
Tr[i - 1][j] = 0;
i--;
}
}
if(j < 1)
{
break;
}
}
for(int i = 1;i <= Num;i++)
{
Dp2[i][1] = Tr[i - 1][1] + Tr[i][1];
Dp2[1][i] = Tr[1][i - 1] + Tr[1][i];
}
Dp2[1][1] = Tr[1][1];
for(int i = 2;i <= Num;i++)
{
for(int j = 2;j <= Num;j++)
{
if(Dp2[i][j - 1] >= Dp2[i - 1][j])
{
Dp2[i][j] = Dp2[i][j - 1] + Tr[i][j];
}else
{
Dp2[i][j] = Dp2[i - 1][j] + Tr[i][j];
}
}
}
cout << Dp1[Num][Num] + Dp2[Num][Num];
}