求助!,54分代码
  • 板块P1120 小木棍
  • 楼主Chenww
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/3/1 13:47
  • 上次更新2023/10/23 23:27:24
查看原帖
求助!,54分代码
591192
Chenww楼主2023/3/1 13:47

代码如下

#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
int a[70],v[70],val,n,sum,cnt,len,fail;

bool cmp(int x,int y){
	return x > y;
}
/*stick表示拼到第stick根木棍
cab表示当前木棍长度
last表示拼接的上一根木棍*/ 
bool dfs(int stick,int cab,int last){
	if(stick >= cnt) return true;//拼完所有木棍 
	if(cab == len) return dfs(stick+1,0,1);//当前木棍已拼完
	fail = 0;
	for(int i = last;i <= n; i++)
		if(!v[i] && cab + a[i] <= len && fail != a[i]){
			v[i] = 1;
			if(dfs(stick , cab+a[i],i+1)) return true;
			fail = a[i];
			if(cab == 0 || cab + a[i] >= len) return false;
		}
	return false;
}
int main(){
	cin>>n;
	for(int i = 1;i <= n; i++){
		cin>>a[i];
		sum += a[i],val = max(val,a[i]);
	}
	sort(a + 1,a+n+1,cmp);
	for(len = val;len <= sum; len++){
		if(sum % len != 0) continue;
        //fail = 0;
		memset(v,0,sizeof(v));
		cnt = sum / len;
		if(dfs(1,0,1)) break;
	}
	printf("%d",len);
	return 0; 
} 
2023/3/1 13:47
加载中...