| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:嘿嘿,第一次Accepted,本人的第一道题啊!!高手们看看能不能再优化(附代码)In Reply To:Re:嘿嘿,第一次Accepted,本人的第一道题啊!!高手们看看能不能再优化(附代码) Posted by:leevickwan at 2007-03-04 13:41:21 这是我参看别人写的
你看看吧
#include<stdio.h>
#include<iostream>
using namespace std;
int point[101][101];
int values[101][101];
bool flag[101][101];
int direction[4][2]={{0,-1},{0,1},{-1,0},{1,0}};
int R,C;
int find(int x,int y)
{
int i,temp,max=1;
if(x>=R || y>=C || x<0 || y<0)
return 0;
if(flag[x][y])
// if(values[x][y]!=0)
return values[x][y];
for(i=0;i<4;i++)
{
if(point[x][y]>point[x+direction[i][0]][y+direction[i][1]])
{
temp=find(x+direction[i][0],y+direction[i][1]);
if(max<temp+1)
max=temp+1;
}
}
flag[x][y]=true;
values[x][y]=max;
return max;
}
int main()
{
int i,j;
int max=1,temp;
scanf("%d %d",&R,&C);
for(i=0;i<R;i++)
{
for(j=0;j<C;j++)
{
scanf("%d",&point[i][j]);
flag[i][j]=false;
}
}
for(i=0;i<R;i++)
{
for(j=0;j<C;j++)
{
temp=find(i,j);
if(max<temp)
max=temp;
}
}
printf("%d\n",max);
for(i=0;i<R;i++)
{
for(j=0;j<C;j++)
{
cout<<values[i][j]<<endl;
}
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator