#include <stdio.h>
#include <string.h>
int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
int n,k,res[102][102],map[102][102];
int max(int a,int b)
{
return a>b?a:b;
}
int find(int x,int y)
{
if(res[x][y]!=-1)return res[x][y];
int xi,yi,i,j,count=0;
for(j=1;j<=k;j++)
for(i=0;i<4;i++)
{
xi=x+j*dir[i][0];
yi=y+j*dir[i][1];
if(0<=xi&&xi<n&&0<=yi&&yi<n&&map[x][y]>map[xi][yi])
count=max(count,find(xi,yi));
}
if(count)res[x][y]=count+map[x][y];
else res[x][y]=0;
return res[x][y];
}
int main()
{
int i,j,maxn;
while(scanf("%d %d",&n,&k))
{
if(n==-1&&k==-1)
break;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
scanf("%d",&map[i][j]);
res[i][j]=-1;
}
res[0][0]=map[0][0];
for(i=0;i<n;i++)
for(j=0;j<n;j++)
find(i,j);
maxn=-1;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
if(maxn<res[i][j])
maxn=res[i][j];
}
printf("%d/n",maxn);
}
return 0;
}
hdu 1078
最新推荐文章于 2024-07-30 10:30:00 发布