部分测试点跑出的数据是答案的两倍?..
查看原帖
部分测试点跑出的数据是答案的两倍?..
1537856
h807063513楼主2025/1/23 21:56
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n,num;
int arr[70],maxn,minn=1e9;
bool vis[70],xx;
bool f(int x){
	if(x==0){
		num++;
		return true;
		
	}
	else{
		for(int i=1;i<=n;i++){
			if(arr[i]<=x&&!vis[i]){
				vis[i]=true;
				if(f(x-arr[i])){
					return true;
				}
				vis[i]=false;
			}
		}
		return false;//未查询到下一个答案 
	}
}
bool cmp(int a,int b){
	return a>b;
}
int main(){
	cin>>n;
	for(int i=1;i<=n;++i){
		cin>>arr[i];
		arr[0]+=arr[i];
		maxn=max(arr[i],maxn);
		minn=min(arr[i],minn);
	}
	sort(arr+1,arr+1+n,cmp);
	//最小值一定大于等于maxn+minn;
	for(int i=maxn+minn;i<=arr[0]/2;i++){
		if(arr[0]%i)continue;
		while(f(i)){
		}
		if(num==arr[0]/i){
			cout<<i;
			return 0;
		}
		num=0;
		memset(vis,false,sizeof(vis));
	} 
}
2025/1/23 21:56
加载中...