作者:
炽热的
,
2022-07-29 08:40:09
,
所有人可见
,
阅读 76
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 110;
int n, m;
int w[N][N];
int f[N][N];
int dx[] = {-1, 0, 1, 0}, dy[] = {0, 1, 0, -1};
int dfs(int x, int y)
{
if (f[x][y]) return f[x][y];
int s = 0;
for (int i = 0; i < 4; i ++ )
for (int j = 1; j <= m; j ++ )
{
int a = x + dx[i] * j, b = y + dy[i] * j;
if (a < 0 || a >= n || b < 0 || b >= n) continue;
if (w[a][b] <= w[x][y]) continue;
s = max(s, dfs(a, b));
}
return f[x][y] = w[x][y] + s;
}
int main()
{
while (cin >> n >> m, ~n && ~m)
{
for (int i = 0; i < n; i ++ )
for (int j = 0; j < n; j ++ )
cin >> w[i][j], f[i][j] = 0;
cout << dfs(0, 0) << endl;
}
return 0;
}