分析:很好的一条记忆化搜索的例子。
Code
#include <iostream>
using namespace std;
#define InBound(x) x>=0 && x<n
int map[101][101];
int dp[101][101];
int n,k;
int search(int r,int c)
{
if(dp[r][c] != -1)
return dp[r][c];
int nextr,nextc,max=0;
for(int i=1;i<=k;++i)
{
nextc = c + i;
if(InBound(nextc) && map[r][c]<map[r][nextc] && search(r,nextc)>max)
max = dp[r][nextc];
nextc = c - i;
if(InBound(nextc) && map[r][c]<map[r][nextc] && search(r,nextc)>max)
max = dp[r][nextc];
nextr = r + i;
if(InBound(nextr) && map[r][c]<map[nextr][c] && search(nextr,c)>max)
max = dp[nextr][c];
nextr = r - i;
if(InBound(nextr) && map[r][c]<map[nextr][c] && search(nextr,c)>max)
max = dp[nextr][c];
}
dp[r][c] = max + map[r][c];
return dp[r][c];
}
int main()
{
while(cin>>n>>k,n!=-1 || k!=-1)
{
for(int i=0;i<n;++i)
for(int j=0;j<n;++j)
cin>>map[i][j];
memset(dp,-1,101*101*sizeof(int));
cout<<search(0,0)<<endl;
}
return 0;
}
posted @
2009-05-01 20:02
黄浩贤
阅读(
229)
评论()
编辑
收藏
举报