HDU1078 FATMOUSE AND CHEESE(DP)

。。。一个变量打错。。。调了一个上午。。。擦的

#include<stdio.h>
#include<string.h>

int n,k;
int a[100][100];
int dp[100][100];

int move[4][2]={{1,0},{-1,0},{0,1},{0,-1}};

int inarea(int x,int y)
{
	return x>=0 && y>=0 && x<n && y<n;
}

int dfs(int x,int y)
{
	if (dp[x][y]>0) return dp[x][y];
	
	for (int i=0; i<4; i++) {
		for (int j=1; j<=k; j++) {
			if (inarea(x+j*move[i][0],y+j*move[i][1]) && a[x+j*move[i][0]][y+j*move[i][1]]>a[x][y]) {
				if(dfs(x+j*move[i][0],y+j*move[i][1])+a[x][y]>dp[x][y])
					dp[x][y]=dfs(x+j*move[i][0],y+j*move[i][1])+a[x][y];
			}
		}
	}
	
	if (dp[x][y]==-1) {
		dp[x][y]=a[x][y];
	}
	
	return dp[x][y];
}

int main()
{
	while (scanf("%d%d",&n,&k),~n || ~k) {
		
		memset(dp, -1, sizeof(dp));
		
		for (int i=0; i<n; i++)
			for (int j=0; j<n; j++)
				scanf("%d",a[i]+j);
		
		dfs(0, 0);
		
		int max=-1000000;
		
		for (int i=0; i<n; i++) {
			for (int j=0; j<n; j++) {
				if (dp[i][j]>max) {
					max=dp[i][j];
				}
			}
		}
		
		printf("%d\n",max);
		
	}
}

啊  

posted on 2011-07-08 09:09  Eucalyptus  阅读(214)  评论(0编辑  收藏  举报