枚举n个石头的状态(即分在左还是右),然后找到答案最小的状态。
#include <bits/stdc++.h>
using namespace std;
int a[25];
int main() {
int n; scanf("%d", &n);
for (int i = 0; i < n; i++) scanf("%d", &a[i]);
int ans = 0x3f3f3f3f;
for (int i = 0; i < (1 << n); i++) {
int l = 0, r = 0;
for (int j = 0; j < n; j++) {
if (i & (1 << j)) l += a[j];
else r += a[j];
}
ans = min(ans, abs(l - r));
}
printf("%d\n", ans);
return 0;
}