1 条题解
-
0
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
- 上传者