求调
  • 板块灌水区
  • 楼主technology_s
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/4/28 21:11
  • 上次更新2024/4/29 09:18:45
查看原帖
求调
1061770
technology_s楼主2024/4/28 21:11

link

T了。

有没有少的/多余的剪枝?

#include<bits/stdc++.h>
using namespace std;
int n,sum,ret,vis[110],a[110];
int cmp(int a,int b){
	return a>b;
}void dfs(int st,int now,int k){
	if(now==0){
		if(sum/ret==st){
			printf("%d",ret);
			exit(0);
		}for(int i=1;i<=n;i++){
			if(vis[i]==1){
				dfs(st+1,ret,i);
				return;
			}
		}
	}if(k>n){
		return;
	}for(int i=k;i<=n;i++){
		if(vis[i]==0&&a[i]<=now){
			vis[i]=1;
			dfs(st,now-a[i],i+1);
			vis[i]=0;
			if(ret==now){
				break;
			}while(i<=n-1&&a[i]==a[i+1]){
				i++;
			}
		}
	}
}int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
		sum+=a[i];
	}sort(a+1,a+n+1,cmp);
	for(int i=a[1];i<=sum;i++){
		if(sum%i==0){
			ret=i;
			dfs(1,i,1);
		}
	}return 0;
}
2024/4/28 21:11
加载中...