Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

这道题AC的我好辛苦

Posted by yzhw at 2008-11-12 18:46:01 on Problem 1088
就是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:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator