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 softmind at 2007-09-03 01:39:04 on Problem 1011
#include <stdio.h>
#include <string.h>
#include <stdlib.h> 
int stick[100];
int used[100];
int n, //木棍数量 
	Max,//木棍最大长度 
	num,//相等长度木棍的数量  
	F,//全局变量表示是否有结果 
	res;//最后结果; 
int cmp(const void *a,const void *b)
{
	return *(int *)b-*(int *)a;
}
void Dosearch(int index,int cur_length,int length,int cur_num)
{
	if(F)return;
	if(cur_length==length){
		cur_num++;
    	if(cur_num==num-1){
    		printf("%d\n",length);
    		F = 1;
    		return;
    	}
		Dosearch(0,0,length,cur_num);
	}		
   	for(int i=index;i<n;i++)
   	{
   		if(!used[i]&&cur_length+stick[i]<=length)
   		{		
   			used[i]=1;
   			Dosearch(i+1,cur_length+stick[i],length,cur_num);
   			if(F)return;
   			used[i]=0;   
   			if(stick[i]==length-cur_length)return;
   		}
   	}
}
void doneSearch(int sum){
	F=0;
	for(int i=Max;i<=sum;i++)
	{
		if(sum%i!=0&&!F)
			continue;
		memset(used,0,sizeof(used));
		num=sum/i;
		used[0]=1;
		Dosearch(0,stick[0],i,0);
		if(F){
			return;
		}
	}
}
int main()
{

	while(scanf("%d",&n)&&n)
	{
		int sum=0;
		Max=0;
		for(int i=0;i<n;i++){
			scanf("%d",&stick[i]);
			sum+=stick[i];			
			if(stick[i]>Max)
				Max=stick[i];		
		}
		qsort(stick,n,sizeof(int),cmp);
		doneSearch(sum);
	}
	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