36,求助
  • 板块P1120 小木棍
  • 楼主lihaoyyy
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/4/14 08:20
  • 上次更新2024/4/14 10:30:29
查看原帖
36,求助
1278786
lihaoyyy楼主2024/4/14 08:20
#include<bits/stdc++.h>
using namespace std;
const int N=70;
long long n,a[N];
long long len,cnt;   //len原来木棍长度   cnt 数量 
bool used[N],flag=0;
void dfs(int i,int L,int last)
{
	if(i>cnt)
	{
	flag=1;
	return ;
	}
	
	
	if(flag)return ; 
	
	if(L==len)dfs(i+1,0,1) ;  //新拼一根 
	
	int fail=0;
	for(int j=last;j<=n;j++)
		if(used[j]==0&&L+a[j]<=len&&a[j]!=fail)
		{
			used[j]=1;
			dfs(j,L+a[j],j+1);
			used[j]=0;
			if(flag==0)
			{
				fail=a[j];
				if(L==0||L+a[j]==len)return ;
			}
		
		}
}

int main(){
	cin>>n;
	long long big=0;
	long long sum=0;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		sum+=a[i];
		big=max(a[i],big);
	
	}
	sort(a+1,a+n+1);
	reverse(a+1,a+n+1);
	
	for(len=big;len<=sum;len++)
		if(sum%len==0)
		{
			
			cnt=sum/len;
			flag=0;
			dfs(1,0,1);
			if(flag){
				cout<<len;
				return 0;                                                                                                                                                                                                           
			} 
		}
}
2024/4/14 08:20
加载中...