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

我WA了,谁帮忙看一下

Posted by anotherh at 2006-03-11 18:24:12 on Problem 1011
/*pku 1011*/
#include<stdio.h>
#include<stdlib.h>
#define N 80
int sticks[N],a[N],n,all;

int cmp(const void *a,const void *b)
{
	return *((int *)b)-*((int *)a);
}

int dfs(int len,int begin,int end)/*END代表原长度,就是找到这么长后一次搜索结束*/
{
	int ii,jj,temp;
	for(ii=begin;ii<n;ii++)
	{	
		if(a[ii])
		{		
			if(len+a[ii]==end)
			{
				a[ii]=0;
				return 1;
			}
			else if(len+a[ii]<end){	
				
				temp=dfs(len+a[ii],ii+1,end);
				if(temp) 
				{
					a[ii]=0;
					return 1;
				}
			}					
		}
	}
	return 0;
}

int find_small()
{		
	int jj,kk,judge,ori;
	for(ori=sticks[0];ori<=all;ori++)
	{						
		if(!(all%ori))
		{
			for(jj=0;jj<n;jj++)
				a[jj]=sticks[jj];	
			for(jj=1,judge=1;jj<=all/ori&&judge;jj++)/*找到JJ次完整的*/
				{
					kk=0;
					while(!a[kk])
						kk++;
					judge=dfs(0,kk,ori);				
				}
			if(judge)
				return ori;
		}
	}
}

int main()
{
	int ii;
	while(scanf("%d",&n)&&n)
	{
	
		for(ii=all=0;ii<n;ii++)
		{
			scanf("%d",sticks+ii);
            all+=sticks[ii];
		}
		qsort(sticks,n,sizeof(sticks[0]),cmp);
		/*printf("%d\n",all);*/				
		printf("%d\n",find_small());			
	}
}

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