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

用记忆化搜索好做

Posted by sunmoonstar_love at 2006-07-22 19:16:22 on Problem 1088
In Reply To:那位帮我看下有什么数据通不过,谢谢了;为什么总是WRONG ANSWER!!!万分感谢。。。。 Posted by:boys at 2006-07-22 18:32:12
> #include <iostream>
> 
> using namespace std;
> int m,n;
> struct node 
> {
> 	int N;
> 	int l,r;
> };
> void copy(node &a,node &b)
> {
> 	a.N=b.N;a.l=b.l;a.r=b.r;
> }
> int Partition(node a[],int low,int high)
> {
>     int pivotloc;
> 	copy(a[0],a[low]);
> 	pivotloc=a[low].N;
> 	while(low<high)
> 	{
> 		while(low<high&&a[high].N>=pivotloc)
> 			--high;
> 		if(low<high){
> 			copy(a[low++],a[high]);
> 		}
> 		while(low<high&&a[low].N<=pivotloc)
> 			++low;
> 		if(low<high)
> 		{
> 			copy(a[high--],a[low]);
> 		}
> 	}
> 	copy(a[low],a[0]);
> 	return low;
> }
> void QSort(node a[],int s,int t)
> {   
>     int pivotloc;
> 
> 	if(s<t){
> 	 pivotloc=Partition(a,s,t);
> 	 QSort(a,s,pivotloc-1);    
> 	 QSort(a,pivotloc+1,t);
> 	}
> }
> void Quick_sort(node a[])
> {
>   QSort(a,1,m*n);
> 
> }
> int  main()
> {
> 	int **a,i,j,k=1,*visted;
> 	node *b;
> 	int c[4][2]={{0,-1},{0,1},{-1,0},{1,0}};
> 	cin>>m>>n;
>     a=new int*[m+2];
> 	for(i=0;i<m+2;i++)
> 		a[i]=new int[n+2];
> 	b=new node[m*n+1];
> 	visted=new int[m*n+1];
> 	for(i=1;i<=m*n;i++)
> 		visted[i]=1;
> 	for(i=1;i<=m;i++)
> 		for(j=1;j<=n;j++)
> 		{
> 			cin>>a[i][j];
> 		}
> 	for(i=1;i<=m;i++)
> 		for(j=1;j<=n;j++)
> 		{  
> 			b[k].N=a[i][j];
> 			b[k].l=i;
> 			b[k].r=j;
> 			k++;
> 		}	
> 	Quick_sort(b);
> 	int sum=0,count=1;
> 	node p;k=1;
> 	for(k=1;k<=m*n-sum;k++) 
> 	{  
>     	if(visted[k])
> 		{
> 	     copy(p,b[k]);visted[k]=0;
> 	    for(i=k+1;i<=m*n;i++)
> 		{   
> 		    for(j=0;j<4;j++)
> 			if((p.l+c[j][0])>=1&&(p.l+c[j][0])<=m&&(p.r+c[j][1])>=1&&(p.r+c[j][1])<=n&&
> 				a[p.l+c[j][0]][p.r+c[j][1]]==b[i].N&&b[i].N>p.N)
> 			{  
> 			   count++;	
> 			   p.N=p.l=p.r=0;
> 			   copy(p,b[i]);
> 			   visted[i]=0;
> 			   break;
> 			}
> 		}
>     	 if(count>sum)sum=count; 	 
> 		}
> 	count=1;
> 	}
> 	cout<<sum<<endl;
> 	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