前言
差不多一样的题
传送门 :
思路
虽然本题是从两个角跑出来
但是其实想想 和 从左上角跑出来一样的
因此这题是可以抽象为 方格取数模型
所以在原方程不变的情况下,我们做一些边界处理就行
还有就是 n 和 m 竟然是倒过来的 吐血。。
CODE
void solve()
{
cin>>m>>n;
int a,b,c;
// while(cin>>a>>b>>c,a||b||c) w[a][b] = c;
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
cin>>w[i][j];
for(int k=2; k<=n+m; k++)
{
for(int i1=1; i1<=m; i1++)
for(int i2 =1; i2<=m; i2++)
{
int j1 = k-i1;
int j2 = k-i2;
if(j1 > 0 && j1<=n && j2>0 &&j2<=n)
{
int t = w[i1][j1];
if(i1!=i2) t+=w[i2][j2];
int &x = f[k][i1][i2];
x = max(x,f[k-1][i1-1][i2-1]+t);
x = max(x,f[k-1][i1-1][i2]+t);
x = max(x,f[k-1][i1][i2-1]+t);
x = max(x,f[k-1][i1][i2]+t);
}
}
}
cout<<f[n+m][m][m]<<endl;
}