1 条题解

  • 0
    @ 2025-1-7 11:49:15

    C++ :

    #include <bits/stdc++.h>
    using namespace std;
    
    void init()
    {
    #ifndef ONLINE_JUDGE
    	freopen("lg.in", "r", stdin);
    	freopen("lg.out", "w", stdout);
    #endif
    }
    
    const int maxn = 66;
    int n, sum, d;
    int a[maxn], len[maxn], pre[maxn];
    
    void dfs(int u, int k, int p)
    {
    	if (u == 0)
    	{
    		dfs(d, k - 1, a[n]);
    		return;
    	}
    	else if (k == 0)
    	{
    		cout << d;
    		exit(0);
    	}
    	p = (p < u ? p : u);
    	while (p && !len[p])
    		p--;
    	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()
    {
    	init();
    	cin >> n;
    	for (int i = 1, x; i <= n; i++)
    	{
    		cin >> x;
    		a[i] = x;
    		sum += x;
    		len[x]++;
    	}
    	sort(a + 1, a + n + 1);
    	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;
    }
    

    信息

    ID
    1084
    时间
    1000ms
    内存
    512MiB
    难度
    (无)
    标签
    (无)
    递交数
    0
    已通过
    0
    上传者