hdu 1708

来源:互联网 发布:淘宝店铺素材免费下载 编辑:程序博客网 时间:2024/05/17 09:19

OJ

#include <iostream>#include <cstdio>using namespace std;int n,k;int map[101][101];int dp[101][101];bool is(int a,int b){if(a<n&&b<n&&a>=0&&b>=0) return true;return false;}int deal(int a,int b){     if(dp[a][b]) return dp[a][b]; int r,l; int min = 0; for(int i=1;i<=k;i++) {        r = a+i;l = b;if(is(r,l)&&map[a][b]<map[r][l]){int k = deal(r,l);if(k>min) min = k;} r = a-i;l = b;if(is(r,l)&&map[a][b]<map[r][l]){int k = deal(r,l);if(k>min) min = k;} r = a;l = b+i;if(is(r,l)&&map[a][b]<map[r][l]){int k = deal(r,l);if(k>min) min = k;} r = a;l = b-i;if(is(r,l)&&map[a][b]<map[r][l]){int k = deal(r,l);if(k>min) min = k;} } dp[a][b] = min+map[a][b]; return dp[a][b];}void init(){while(true){      scanf("%d%d",&n,&k);  if(n==-1&&k==-1) break;  for(int i=0;i<n;i++)  for(int j= 0;j<n;j++) scanf("%d",&map[i][j]);  int min = 0;  memset(dp,0,sizeof(dp));  printf("%d\n",deal(0,0));}}int main(){init();return 0;}