97分求助
  • 板块P1120 小木棍
  • 楼主一SakuRa
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/9/25 19:48
  • 上次更新2023/10/27 09:57:50
查看原帖
97分求助
419519
一SakuRa楼主2022/9/25 19:48
#include<bits/stdc++.h>
using namespace std;
int len,n,k=1;
bool v[101];
int a[101];
int cnt,sum,val;
bool dfs(int stick,int cab,int last){
	if(stick>cnt)
	  return true;
	if(cab==len)
	  return dfs(stick+1,0,1); 
	int fail=0;
	for(int i=last;i<=n;i++)
		if(v[i]==0&&a[i]+cab<=len&&fail!=a[i])
		{
			v[i]=1;
			if(dfs(stick,cab+a[i],i))
			  return true;
		    v[i]=0;
			fail=a[i];
			if(cab==0||cab+a[i]==len)
			  return false;
	}
	return false;
}
int main()
{
	cin>>n;
	sum=0;
	val=0;
	for(int i=1;i<=n;i++){
		int temp;
		cin>>temp;
		if(temp>50)
			continue;
		sum+=temp;
		a[k]=temp;
		k++;
        val=max(val,a[i]);
	}
	sort(a+1,a+n+1 );
	reverse(a+1,a+n+1);
	for(len=val;len<=sum;len++)
	{
		if(sum%len)
	    	continue;
		cnt=sum/len;
		memset(v,0,sizeof(v));
		if(dfs(1,0,1)){
	    	cout<<len<<endl;
	    	break;
	    }   
	}
	return 0;
} 

2022/9/25 19:48
加载中...