P1120 求助
  • 板块题目总版
  • 楼主huang_ak_IOI
  • 当前回复1
  • 已保存回复1
  • 发布时间2022/6/21 21:38
  • 上次更新2023/10/27 22:51:34
查看原帖
P1120 求助
330418
huang_ak_IOI楼主2022/6/21 21:38

谢谢谢谢谢谢谢谢谢谢

#include<bits/stdc++.h>
//#include<graphics.h>
//#define fo(1,j,k) for(int i=j;i<=k;i++)
using namespace std;
/*
inline int read(){
    int s=0,w=1;
    char ch=getchar();
    while(ch<='0'||ch>'9'){
        if(ch=='-') w=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
    return s*w;
}
*/
int n,sum,mn=65,mx,d;
int len[66],a[66],pre[66]; 
int ans=999999;
void dfs(int u,int k,int p){
	if(u==0){
		dfs(d,k-1,a[n]);
		return;
	}
	if(k==0){
		cout<<d;
		exit(0);
	}
	p=min(p,u);
	while(p){
		if(len[p]){
			--len[p];
			dfs(u-p,k,p);
			++len[p];
			if((u==p) || (u==d)) return;
			p=pre[p];
		}else p=pre[p];
	}
}
int main(){
    //freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	//std::ios::sync_with_stdio(false);
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		sum+=a[i];
		len[a[i]]++;
	}
	ans=sum;
	sort(a+1,a+1+n);
	for(int i=1;i<=n;i++){
		if(a[i]!=a[i-1]) pre[a[i]]=a[i-1];
	}
	for(d=a[n];(d<<1)<=sum;++d) if((sum%d)==0) dfs(d,sum/d,a[n]);
	cout<<sum;
	return 0;
}


2022/6/21 21:38
加载中...