| ||||||||||
| 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 | |||||||||
这道题AC的我好辛苦就是DP的时候2条语句顺序错了,搞了我1个多小时。。汗~~~~~~~~~~~~·郁闷
把代码贴出来吧,不会的可以参考下
就是一个很简单的DP,不过要稍微改下
# include <stdio.h>
int data[101][101];
int refer[101][101];
int h,l;
int max(int a,int b,int c,int d)
{
int temp=a;
if(b>temp) temp=b;
if(c>temp) temp=c;
if(d>temp) temp=d;
return temp;
}
void searchmax(int *a,int *b)
{
int i,j;
int temp=data[1][1];
for(i=1;i<=h;i++)
for(j=1;j<=l;j++)
if(data[i][j]>temp)
{
temp=data[i][j];
*a=i;
*b=j;
}
}
int deal(int i,int j,int num)
{
if(i<=0||j<=0||i>h||j>l||data[i][j]>=num) return 0;
else if(refer[i][j]!=-1) return refer[i][j];
else
{
refer[i][j]=max(deal(i-1,j,data[i][j]),deal(i+1,j,data[i][j]),deal(i,j-1,data[i][j]),deal(i,j+1,data[i][j]))+1;
return refer[i][j];
}
}
main()
{
int i,j,result;
memset(refer,-1,sizeof(refer));
scanf("%d %d",&h,&l);
for(i=1;i<=h;i++)
for(j=1;j<=l;j++)
scanf("%d",&data[i][j]);
searchmax(&i,&j);
int max=deal(i,j,99999);
for(i=1;i<=h;i++)
for(j=1;j<=l;j++)
{
if(refer[i][j]==-1) deal(i,j,99999);
if(refer[i][j]>max) max=refer[i][j];
}
printf("%d\n",max);
system("pause");
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator