Отримання знань

дистанційна підтримка освіти школярів


Катание на лыжах
http://acm.pku.edu.cn/JudgeOnline/problem?id=1088

   Входные данные

   Выходные данные

   Пример входных данных

   Пример выходных данных

   Анализ условия и обсуждение идеи решения

   Пример решения на C++:

#include "iostream" 
#include "math.h"
using namespace std;
int B[4][2]={{0,-1},{-1,0},{0,1},{1,0}};
int flag[101][101]={0};
int A[103][103]={0};
int f(int i,int j)
{ int x,y;
if(flag[i][j]!=0) return flag[i][j];
else {
for(int a=0; a < 4; a++)
{ x=i+B[a][0];
y=j+B[a][1];
if(A[i][j] > A[x][y]) flag[i][j]=max(flag[i][j],f(x,y)+1);
}
if(flag[i][j]==0) flag[i][j]=1;
return flag[i][j];
}
}

int main()
{
int R,C;
scanf("%d%d",&R,&C);
for(int i=0; i <= C+1; i++)
{A[0][i]=10001;A[R+1][i]=10001;}
for(int i=0; i <= R+1; i++)
{A[i][0]=10001;A[i][C+1]=10001;}
for(int i=1; i <= R; i++)
for(int j=1; j <= C; j++)
scanf("%d",&A[i][j]);
int maxn=1;
for(int i=1; i <= R; i++)
for(int j=1; j <= C; j++)
{if(f(i,j) > maxn) maxn=f(i,j);}
printf("%d\n",maxn);
return 0;
}

 

Попередня Зміст Наступна
В системі: гості - (1); користувачі - (0)