RT。
#include <bits/stdc++.h>
using namespace std;
#define MAXN 66
int n;
int a[MAXN], h[MAXN];
bitset<MAXN> vis;
bool dfs(int ans, int step, int res, int las){
if (step == n) return res;
bool flag = false;
step++;
for (int i=n; i>=1; i--){
if (vis.test(i) || a[i] > res || a[i] > las) continue;
vis.set(i);
if (a[i] == res) flag |= dfs(ans, step, ans, ans);
else flag |= dfs(ans, step, res-a[i], a[i]);
if (flag) return true;
vis.reset(i);
}
return false;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n;
for (int i=1; i<=n; i++) cin >> a[i];
sort(a+1, a+n+1);
for (int i=1; ; i++){
if (dfs(i, 0, i, i)){
cout << i;
return 0;
}
}
return 0;
}
目前还没有剪枝。