老鼠的移动方向仅仅只是水平和垂直,且它移动的过程中不能改变其原来的方向。
我tm还在那宽搜了半天
这题是记忆化搜索
#include<iostream>
#include<cstring>
#include<algorithm>
#include<math.h>
#include<vector>
#include<set>
#include<queue>
#include<list>
#include<map>
using namespace std;
int n, k;
int dp[110][110];
int m[110][110];
int dre[4][2] = {{-1, 0}, {1, 0}, {0, 1}, {0, -1}};
int memfind(int row, int col) {
if (m[row][col] != -1) {
return m[row][col];
}
int maxv = 0;
for (int i = 1; i <= k; i++) {
for (int j = 0; j < 4; j++) {
int newr = row + dre[j][0] * i;
int newc = col + dre[j][1] * i;
if (newr >= 0 && newr < n && newc >= 0 && newc < n && dp[newr][newc] > dp[row][col]) {
maxv = max(maxv, memfind(newr, newc));
}
}
}
return m[row][col] = maxv + dp[row][col];
}
int main() {
while (cin >> n >> k) {
if (n == -1 && k == -1)break;
memset(dp, 0, sizeof(dp));
memset(m, -1, sizeof(m));
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> dp[i][j];
}
}
cout << memfind(0, 0) << endl;
}
}