| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:一组比较BT的数据!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: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator