94分求助,两个点WA
查看原帖
94分求助,两个点WA
356925
快斗游鹿楼主2022/7/6 20:58
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=100;
ll n,k,len,minn,maxx,flag;
bool bz[N];
ll a[N];
void dfs(ll l,ll u,ll step){
	if(flag)return;
	if(u==len)dfs(0,0,step+1);
	if(len-u<a[n])return;
	if(step==k-1){
		printf("%lld",len);
		flag=1;
		exit(0);
	}
	for(register int i=l+1;i<=n;i++){
		if(!bz[i]&&u+a[i]<=len){
			bz[i]=1;
			dfs(i,u+a[i],step);
			bz[i]=0;
			ll j=i;
			if(u+a[i]==len||u==0)return;
			while(i<n&&a[i]==a[j])i++;
			if(i==n)return;
		}
	}
}
bool cmp(ll x,ll y){
	return x>y;
}
int main(){
	freopen("P1120_12.in","r",stdin);
	scanf("%lld",&n);
	for(register int i=1;i<=n;i++){
		scanf("%lld",&a[i]);
		maxx+=a[i];
		minn=max(minn,a[i]);
	}
	sort(a+1,a+1+n,cmp);
	//for(int i=1;i<=n;i++)cout<<a[i]<<' ';cout<<endl;
	for(register int i=minn;i<=maxx/2;i++){
		if(maxx%i==0){
			k=maxx/i;
			len=i;
			dfs(0,0,0);
		}
		if(flag)return 0;
	}
	printf("%lld",maxx);
	return 0;
}
2022/7/6 20:58
加载中...