简单的DP,DFS找到当前点能够获得的最大奶酪数。。。。要用备忘录
#include <iostream>
#include <queue>
using namespace std;
const int size = 110;
const int Go[4][2] = {{-1, 0}, {0, -1}, {0, 1}, {1, 0}};
int n, k;
int map[size][size];
int chessnum[size][size];
bool check(int x, int y)
{
return (x>=0&&x<n&&y>=0&&y<n);
}
int Dfs(int a, int b)
{
if (chessnum[a][b])return chessnum[a][b];
int maxx = 0;
for (int i = 0; i < 4; i ++){
for (int j = 1; j <= k; j ++){
int xx = a + j*Go[i][0];
int yy = b + j*Go[i][1];
if (check(xx, yy) && map[xx][yy] > map[a][b]){
int kkk = Dfs( xx, yy);
if (kkk > maxx) maxx = kkk;
}
}
}
chessnum[a][b] = maxx+map[a][b];
return chessnum[a][b];
}
int main()
{
while (scanf("%d%d", &n, &k) && (n+k)!=-2){
for (int i = 0; i < n; i ++){
for (int j = 0; j < n; j ++){
scanf("%d",&map[i][j]);
}
}
memset(chessnum, 0, sizeof(chessnum));
Dfs(0, 0);
printf("%d/n", chessnum[0][0]);
}
return 0;
}