您的位置:首页 > 其它

PKU1088——滑雪

2010-05-05 15:52 405 查看



字号:大 中 小

http://acm.pku.edu.cn/JudgeOnline/problem?id=1088

CODE:
/*
* author:Logic0
* time : 20010-5-4
*/

#include <stdio.h>
#include <stdlib.h>
#define MAX 101

int mx[MAX][MAX];
int opt[MAX][MAX];

int r,c;

int move[4][2];

void init()
{
//memset(mx,0,sizeof(mx));
//memset(opt,0,sizeof(opt));
move[0][0] = 0,move[0][1] = 1;  //right
move[1][0] = 0,move[1][1] = -1; //left
move[2][0] = 1,move[2][1] = 0;  //down
move[3][0] = -1,move[3][1] = 0; //up
}

int bound(int x , int y)
{
return ( x >= 1 && x <= r && y >=1 && y <=c);
}

int func(int x , int y)
{
int i,j;

if(opt[x][y] > 0 ) return opt[x][y];

for(i = 0 ; i < 4 ; i++)
{
if( bound(x+move[i][0],y+move[i][1]) )
{
if(mx[x+move[i][0]][y+move[i][1]] < mx[x][y])
{
if(opt[x][y] < func(x+move[i][0],y+move[i][1])+1)
{
opt[x][y] = func(x+move[i][0],y+move[i][1])+1;
}
}
}
}
return opt[x][y];
}
int main(void)
{
int i,j;
int ans = 0;
init();

scanf("%d%d",&r,&c);
for(i = 1 ; i <= r ; i++)
{
for(j = 1 ; j <= c ;j++)
{
scanf("%d",&mx[i][j]);
}
}
for(i = 1 ; i <= r ;i++)
{
for(j = 1 ; j <= c ;j++)
{
if(ans < func(i,j)+1)
{
ans  = func(i,j)+1;
}
}
}
printf("%d",ans);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: