您的位置:首页 > 其它

hdu1978 记忆化搜索

2015-11-05 16:37 411 查看
用一个数组记录的同时进行搜索。

#include<stdio.h>
#include<string.h>
const int maxn = 110;
int map[maxn][maxn],n,m,dp[maxn][maxn];
int ok(int x,int y)
{
if(x<1||y<1||x>n||y>m)
return 0;
return 1;
}
int dfs(int x,int y)
{
int i,j;
if(dp[x][y]>=0)
return dp[x][y];
dp[x][y]=0;
for(i=0;i<=map[x][y];i++)
{
for(j=0;j<=map[x][y]-i;j++)
{
if(ok(x+i,y+j))
dp[x][y]=(dp[x][y]+dfs(x+i,y+j))%10000;
}
}
return dp[x][y];
}
int main()
{
int i,j,t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
scanf("%d",&map[i][j]);
}
}
memset(dp,-1,sizeof(dp));
dp
[m]=1;
int ans=dfs(1,1);
printf("%d\n",ans);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: