经典题目。
/*
* POJ-1088 滑雪
* mike-w
* 2011-10-23
* ------------------------
* 记忆化搜索
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define SIZE 111
int field[SIZE][SIZE];
int opt[SIZE][SIZE];
int R,C;
int d[4][2]={
{1,0},
{-1,0},
{0,1},
{0,-1}
};
int search(int r,int c)
{
int max=0,i,rr,cc,t;
if(opt[r][c]) return opt[r][c];
for(i=0;i<4;i++)
{
rr=r+d[i][0];
cc=c+d[i][1];
if(rr>=0 && rr<R && cc>=0 && cc<C)
if(field[rr][cc]<field[r][c])
if((t=search(rr,cc))>max)
max=t;
}
return opt[r][c]=max+1;
}
int main(void)
{
int i,j,max;
#ifndef ONLINE_JUDGE
freopen("t.in","r",stdin);
#endif
scanf("%d%d",&R,&C);
for(i=0;i<R;i++)
for(j=0;j<C;j++)
scanf("%d",field[i]+j);
for(i=0;i<R;i++)
for(j=0;j<C;j++)
search(i,j);
max=0;
for(i=0;i<R;i++)
for(j=0;j<C;j++)
if(opt[i][j]>max)
max=opt[i][j];
printf("%d\n",max);
return 0;
}
本文讨论了使用记忆化搜索技术解决滑雪路径优化问题,通过递归搜索找到从起点到终点的最短路径,并利用记忆化减少重复计算,提高效率。
995

被折叠的 条评论
为什么被折叠?



