您的位置:首页 > 其它

(1078)HDU-记忆化搜索

2015-02-10 20:20 218 查看
#include<iostream>

#include<cstdio>

#include<string.h>

#include<string>

#include<set>

#include<algorithm>

#include<cmath>

#define ll __int64

#define MAX 1000009

using namespace std;

/*

记忆化搜索

*/

int map[509][509];

int dp[509][509];//(i,j)下最大值

int n,k;

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

int dfs(int x,int y)

{

//cout<<x<<" "<<y<<endl;

if(dp[x][y]) return dp[x][y];

int num = 0;

for(int i=1;i<=k;i++)

{

for(int j = 0;j<4;j++)

{

int xx = x + dir[j][0]*i;

int yy = y + dir[j][1]*i;

if(xx<0||xx>=n||yy<0||yy>=n)continue;

if(map[xx][yy]>map[x][y])

{

num = max(num,dfs(xx,yy));

}

}

}

return dp[x][y] = map[x][y] + num;

}

int main()

{

int i,j;

while(~scanf("%d%d",&n,&k))

{

if(n==-1&&k==-1)break;

for(i=0; i<n; i++)

{

for(j=0; j<n; j++)

{

scanf("%d",&map[i][j]);

}

}

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

printf("%d\n",dfs(0,0));

}

return 0;

}

动态规划基础题,呜呜,自己没想到
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: