您的位置:首页 > 其它

HDU 1078 记忆化搜索

2014-04-21 14:06 232 查看
记忆化搜索模板

#include "stdio.h"
#include "string.h"

int dir[4][2]={1,0,-1,0,0,1,0,-1};
int dp[101][101],a[101][101];
int n,k;

int mx(int a,int b)
{
if (a<b) return b;
else return a;
}
int  dfs(int x,int y)
{
int i,j,xx,yy,maxx;
if (dp[x][y]) return dp[x][y];

maxx=0;
for (i=1;i<=k;i++)
for (j=0;j<4;j++)
{
xx=x+dir[j][0]*i;
yy=y+dir[j][1]*i;

if (xx<1 || xx>n || yy<1 || yy>n) continue;
if (a[x][y]>=a[xx][yy]) continue;

maxx=mx(maxx,dfs(xx,yy));
}
dp[x][y]=maxx+a[x][y];
return  dp[x][y];
}

int main()
{
int i,j;
while (scanf("%d%d",&n,&k)!=EOF)
{
if (n==-1) break;
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
scanf("%d",&a[i][j]);

memset(dp,0,sizeof(dp));

printf("%d\n",dfs(1,1));
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: