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:一组比较BT的数据!

Posted by HEU_xueyan at 2012-03-05 20:46:08 on Problem 1011
In Reply To:一组比较BT的数据! Posted by:winboycool at 2007-04-22 00:07:27
求更BT的数据啊,为什么我的代码秒这组数据,还TLE啊;
#include<iostream>
#include<algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
int n,s[65],sum;
bool used[65];
bool cmp(int a,int b)
{
	return a>b;
}
bool dfs(int cnt,int now,int nowlen,int each)
{
	if(now*each==sum)
		return true;
	for(int i=cnt;i<n;i++)
	{
		if(used[i]||(i&&!used[i-1]&&s[i]==s[i-1]))
			continue;
		if(nowlen+s[i]==each)
		{
			used[i]=false;
			if(dfs(0,now+1,0,each))
				return true;
			used[i]=false;
			return false;
		}
		else if(nowlen+s[i]<each)
		{
			used[i]=1;
			if(dfs(i+1,now,nowlen+s[i],each))
				return true;
			used[i]=0;
			if(now==0)
				return false;
		}
	}
	return 0;
}
int solve()
{
	sort(s,s+n,cmp);
	for(int res=s[0];res<sum;res++)
	{
		if(sum%res)
			continue;
		memset(used,false,sizeof(used));
		if(dfs(0,0,0,res))
			return res;
	}
	return sum;
}
int main()
{
	//freopen("in.in","r",stdin);
	while(scanf("%d",&n),n)
	{
		sum=0;
		for(int i=0;i<n;i++)
		{
			scanf("%d",&s[i]);
			sum+=s[i];
		}
		printf("%d\n",solve());
	}
	return 0;
}
/*
64
40 40 30 35 35 26 15 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 43 42 42 41 10 4 40 40 40 40 40 40 40 40 40 40 40 40 40 40 25 39 46 40 10 4 40 40 37 18 17 16 15 40 40 40 40 40 40 40 40
*/

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