您的位置:首页 > 其它

HDOJ 1078 FatMouse and Cheese 记忆化搜索模板

2016-03-16 21:09 501 查看
记忆花搜索和普通搜索的区别

前者dp思想从终点推到起点也就是祖宗的最优值从他的子孙中的最优值选取

后者枚举从起点到终点刷新一遍

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int dp[200][200],mp[200][200],n,k,bu[4][2] = {0,1,0,-1,1,0,-1,0};
bool can(int x,int y)
{
if(x>=0&&x<n&&y>=0&&y<n)return true;
else return false;
}
int dfs(int x,int y)
{
if(dp[x][y])return dp[x][y];
int count = 0;
for(int j=0;j<4;j++)
for(int i=1;i<=k;i++)
{
int X = x+bu[j][0]*i,Y = y+bu[j][1]*i;
if(!can(X,Y))break;
if(mp[X][Y]>mp[x][y])
{
count = max(count,dfs(X,Y));
}
}
return dp[x][y] = mp[x][y]+count;
}
int main()
{
while(scanf("%d%d",&n,&k)!=EOF)
{
if(n==-1&&k==-1)break;
memset(dp,0,sizeof(dp));
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
scanf("%d",&mp[i][j]);
printf("%d\n",dfs(0,0));
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: