第一条运行时间709ms记录
第二条运行时间4.67s记录
源代码中只要满足第一条代码的判断条件,一定也满足第二条代码的判断条件,时间差异却如此巨大
蒟蒻非常不解,求大佬解惑
#include<bits/stdc++.h>
using namespace std;
int a[70],n,cnt,len;
bool f[70];
bool dfs(int st,int step,int sum)
{
if(step==cnt-1)
{
return 1;
}
if(sum==len) return dfs(1,step+1,0);
int flag=0;
for(int i=st;i<=n;i++)
{
if(!f[i]&&sum+a[i]<=len&&flag!=a[i])
{
f[i]=1;
if(dfs(i+1,step,sum+a[i])) return 1;
f[i]=0;
flag=a[i];
if(sum==0||sum+a[i]==len) return 0;
if(i==1||sum+a[i]==len) return 0;
}
}
return 0;
}
bool cmp(int a,int b)
{
return a>b;
}
int main()
{
int m=0,sum=0;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
sum+=a[i];
m=max(m,a[i]);
}
sort(a+1,a+n+1,cmp);
for(len=m;len<=sum;len++)
{
if(sum%len!=0) continue;
cnt=sum/len;
memset(f,0,sizeof(f));
if(dfs(1,0,0))
{
printf("%d\n",len);
break;
}
}
return 0;
}