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