| ||||||||||
| 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 | |||||||||
这个剪枝条件错了吗,为什么去掉就AC了
//#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<functional>
using namespace std;
const int part = 4;
bool used[30] = {false};
int len[30];
int length;
int find1 = 0;
int n;
void dfs(int level,int curlen,int pth);
void fit(int pth)
{
if(pth > 4)
{
find1 = 1;
// cout<<"yes\n";
return ;
}
if(find1) return ;
int i;
for( i = 0 ; i <n ; i++)
{
if(!used[i])
break;
}
used[i] = true;
dfs(i,len[i],pth);
used[i] = false;
}
void dfs(int level,int curlen,int pth)
{
if(curlen == length )
{
fit(pth+1);
return ;
}
if(level+1> n )
return ;
int i;
for( i = level+1; i<n; i++)
{
if(find1) return ;
if(!used[i])
{
if(curlen+len[i]<=length)
{
used[i] = true;
dfs(i,curlen+len[i],pth);
used[i] = false;
}
}
}
}
int main()
{
int testcase;
int i,j;
int total;
// cin>>testcase;
scanf("%d",&testcase);
for(i =1 ;i<=testcase; i++)
{
total = 0 ;
find1 = 0;
// cin>>n;
scanf("%d",&n);
for(j = 0 ; j<n; j++)
{
// cin>>len[j];
scanf("%d",&len[j]);
total +=len[j];
}
if(total % 4 != 0)
goto output;
length = total/4;
memset(used,false,sizeof(used));
sort(len,len+n,greater<int>());
//if don't add sort it cost 64 ms ,add it 0ms
/*for(j = 0 ; j<n; j++)
{//这个for循环出错了吗?
// printf("%d ",len[j]);
if(len[j]>length)
goto output;
else if(len[j] == length)
{
if(n != 4)
goto output;
}
}*/
//when adding the cutoff method it go wa
fit(1);
output:
if(find1 == 1)
// cout<<"yes\n";
printf("yes\n");
else //cout<<"no\n";
printf("no\n");
}
return 1;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator