60分求优化
查看原帖
60分求优化
658973
what_can_I_do楼主2022/12/24 22:09
#include<bits/stdc++.h>
using namespace std;
int n,a[75],sum=0,ans=0,maxd=-1;
bool b[75]={0};
inline bool cmp(int x,int y)
{
	return x>y;
}
inline void dfs(int k,int s,int yq,int la)
{
	if(yq==0) printf("%d",k),exit(0);
	if(s==k){dfs(k,0,yq-1,0);return;}
	if(k-s<a[n]) return;
	int now=0,l=la+1,r=n;
	while(l<r)
	{
		int mid=(l+r)/2;
		if(a[mid]<=k-s) r=mid;
		else l=mid+1;
	}
	for(register int i=l;i<=n;i++)
	{
		if(a[i]==now) continue;
		if(b[i]) continue;
		if(s+a[i]>k) continue;
		now=a[i];
		b[i]=1,dfs(k,s+a[i],yq,i),b[i]=0;
		if(s-k==a[i]|s-k==k) return;
		while(a[i+1]==a[i]) i++;
	}
}
int main()
{
	scanf("%d",&n);
	for(register int i=1;i<=n;i++) scanf("%d",&a[i]),sum+=a[i];
	sort(a+1,a+n+1,cmp);
	for(register int i=a[1];i<=sum/2;i++)
	{
		if(sum%i) continue;
		dfs(i,a[1],sum/i,1);
	}
	printf("%d",sum);
	return 0;
}

大佬们都来看一看,别装了,我刚才发了个abcD题的求助帖就冒出来一大堆人

2022/12/24 22:09
加载中...