本蒟蒻现在才发现在玄学剪枝题里最可怕的其实是没有一个点TLE但是一堆WA QwQ
输入
31
1 7 32 34 39 25 26 59 2 28 36 61 28 31 49 49 3 27 21 17 51 51 17 39 3 45 30 35 18 46 56
输出
86
我的输出
172
#include<bits/stdc++.h>
int n,mn,sum,m,len,a[100];
bool usd[100];
namespace stick
{
bool cmp(int a,int b)
{
return a>b;
}
void dfs(int k,int last,int ms)
{
if(!k)
{
printf("%d",len);
exit(0);
}
int i,j;
if(!ms)
{
for(i=1;i<=n;i++)
if(!usd[i])
{
usd[i]=true;
break;
}
dfs(k-1,i,len-a[i]);
return;
}
for(i=last+1;i<=n;i++)
if(!usd[i]&&ms>=a[i])
{
usd[i]=true;
dfs(k,i,ms-a[i]);
usd[i]=false;
for(j=i;a[i]==a[j]&&j<n;j++);
if(j>=n)
return;
}
}
}
using namespace stick;
int main()
{
scanf("%d",&n);
for(int i(1),x;i<=n;i++)
{
scanf("%d",&x);
if(x>50)
continue;
a[i]=x;
mn=a[i]>mn?a[i]:mn;
sum+=a[i];
}
std::sort(a+1,a+n+1,cmp);
for(int i=mn;i<=sum;i++)
if(!(sum%i))
{
memset(usd,false,sizeof(usd));
usd[1]=true;
len=i,m=sum/i;
dfs(m,1,len-a[1]);
}
return 0;
}
各位dalao帮忙调调吧蟹蟹了QwQ