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

Re:不好意思,不小心贴了其他题的代码,现去掉。。。

Posted by majuncheng at 2009-08-23 16:48:08 on Problem 1088
In Reply To:我的改进版,0MS~~ Posted by:majuncheng at 2009-08-23 16:45:54
> 
> > 
> #include <cstdio>
> 
> int height[102][102]; //高度
> int wt[102][102];  //记录各点到达的最长长度
> int r,c;  //行数和列数
> 
> int DP(int i,int j)
> {
> 	if (wt[i][j])
> 		return wt[i][j];    //如果已经递归过,长度值就不为初始值(0)了,避免重复运算
> 	int max=0;
> 	int p,h=height[i][j];     //利用递归找到邻近点中长度最长的
> 	if ((p=i-1)>=0 && height[p][j]<h)
> 		if ( DP(p,j)>max)
> 			max=DP(p,j);
> 	if ((p=i+1)<r && height[p][j]<h)
> 		if (DP(p,j)>max)
> 			max=DP(p,j);
> 	if ((p=j-1)>=0 && height[i][p]<h)
> 		if (DP(i,p)>max)
> 			max=DP(i,p);
> 	if ((p=j+1)<c && height[i][p]<h)
> 		if (DP(i,p)>max)
> 			max=DP(i,p);
> 	wt[i][j]=max+1;      //这里使用了和上面楼主一样的技巧,如果四个更新后max仍为0,会被赋以初始值
> 	return wt[i][j];
> }
> 
> int main()
> {
> 	scanf ("%d%d",&r,&c);
> 	int max=0;
> 	for (int i=0;i<r;++i)
> 		for (int j=0;j<c;++j)
> 		{
> 			scanf("%d",&height[i][j]);
> 			wt[i][j]=0;
> 		}
> 	for (int i=0;i<r;++i)
> 		for (int j=0;j<c;++j)
> 			if (DP(i,j)>max)
> 				max=DP(i,j);
> 	printf("%d\n",max);
> 	
> 	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