1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
#include <stdlib.h> #include <string.h> #define Max(x,y) (x)>(y)?(x):(y) int map[100][100],N,k; int max[100][100]; int iPlus[4] = {-1,0,0,1}; int jPlus[4] = {0,-1,1,0}; typedef struct { int x,y; }Node; int dfs(int x,int y) { int i,j,temp,m; int next_x,next_y; if ( max[x][y] != -1) return max[x][y]; m = 0; for ( i = 0; i < 4; i++) { for ( j = 1; j <=k ; j++) { next_x = x + iPlus[i]*j; next_y = y + jPlus[i]*j; if ( next_x>=0 && next_x < N && next_y>=0 && next_y < N && map[next_x][next_y] > map[x][y]) { temp = dfs(next_x,next_y); m = Max(temp,m); } } } max[x][y] = m + map[x][y]; return max[x][y]; } int main() { int i,j; int m; while ( scanf("%d%d",&N,&k), N!=-1 && k!=-1) { for ( i = 0; i < N; i++) for ( j = 0; j < N; j++) scanf("%d",&map[i][j]); memset(max,-1,sizeof(max)); m = dfs(0,0); printf("%dn",m); } return 0; }
|
近期评论