思路
不难发现,题目中写道:c[i][j]>=0
所以,从一个点出发,应当把其可以遍历的所有点都遍历完,可达最大值(该点出发的最大值)
另外,我们还可以发现,(x+1,y+1)与(x-1,y-1)在同一直线上
所以,出发点只有:第一列与第一行
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=1e3+1e2;
ll t,n;
ll a[N][N];
ll maxn,ans;
ll find(ll x,ll y)
{
ll ans_=0;
while(x<=n&&y<=n)
{
ans_+=a[x][y];
x++,y++;
}
return ans_;
}//遍历
signed main()
{
cin>>t;
for(ll i=1;i<=t;i++)
{
maxn=0;
cin>>n;
for(ll j=1;j<=n;j++)
for(ll x=1;x<=n;x++)
cin>>a[j][x];
for(ll j=1;j<=n;j++)
ans=find(1,j),maxn=max(maxn,ans);//第一行
for(ll j=1;j<=n;j++)
ans=find(j,1),maxn=max(maxn,ans);//第一列
cout<<"Case #"<<i<<": "<<maxn<<"\n";
}
return 0;
}