#include<bits/stdc++.h>
using namespace std;
const int N = 70;
int a[N];
int n;
int sum, mi;
int x, s;
bool vis[N];
void dfs(int cnt, int nowsum, int lst) {
if(cnt == s) {
cout << x;
exit(0);
}
int ret = 0, f = 0;
for(int i = lst; i <= n; i++) if(!vis[i] && f != a[i]) {
int now = nowsum + a[i];
if(now > x) continue;
if(now == x) {
vis[i] = 1;
dfs(cnt + 1, 0, 1);
vis[i] = 0;
return ;
}
f = a[i];
vis[i] = 1;
dfs(cnt, now, i + 1);
vis[i] = 0;
if(!nowsum) return ;
}
}
bool cmp(int &a, int &b) {
return a > b;
}
int main() {
cin >> n; int mx = 0;
for(int i = 1; i <= n; i++) {
cin >> a[i];
mx = max(mx, a[i]);
sum += a[i];
}
sort(a + 1, a + 1 + n, cmp);
for(x = mx; x <= sum / 2; x++) {
if(sum % x) continue;
s = sum / x - 1;
for(int j = 1; j <= n; j++) vis[j] = 0;
dfs(0, 0, 1);
}
cout << sum;
return 0;
}
最后一个点TLE了,怎么也优化不了,求助。