#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int a[70];
int used[70];
int m;
int x;
int lent;
bool cmp(int a,int b)
{
return a>b;
}
bool dfs(int nbr,int len,int las)
{
if(nbr>x)return 1;
if(len==lent)return dfs(nbr+1,0,1);
int fl=0;
for(int i=las;i<=m;i++)
{
if(used[i]==0&&len+a[i]<=lent&&fl!=a[i])
{
used[i]=1;
if(dfs(nbr,len+a[i],i))return 1;
used[i]=0;
fl=a[i];
if(len==0)return 0;
}
}
return 0;
}
int main()
{
scanf("%d",&m);
int minn=0;
int sum=0;
for(int i=1;i<=m;i++)
{
scanf("%d",&a[i]);
if(a[i]>50)
{
i--;
m--;
continue;
}
minn=max(minn,a[i]);
sum+=a[i];
}
sort(a+1,a+m+1,cmp);
for(int i=minn;i<=sum;i++)
{
if(sum%i==0)
{
memset(used,0,sizeof(used));
x=sum/i;
lent=i;
if(dfs(1,0,1))
{
cout<<lent<<endl;
return 0;
}
}
}
return 0;
}
「一本通 1.3 例 3」小木棍
最新推荐文章于 2024-02-26 11:16:31 发布