link
解题思路
很暴力的深搜
只需要特殊判断人数是否均衡即可
Code
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
const int maxn = 0x7fffffff;
int T, n, ans, a[30];
void dfs(int x, int lr, int rr, int ls, int rs) {
//x表示到第几个人,lr和rr表示两边人数,ls和rs表示两边体重和
if (x > n) {
if (abs(lr - rr) > 1) return;//人数是否均衡
ans = min(ans, abs(ls - rs));
return;
}
dfs(x + 1, lr, rr + 1, ls, rs + a[x]);
dfs(x + 1, lr + 1, rr, ls + a[x], rs);
}
int main(){
scanf("%d", &T);
while (T--) {
ans = maxn;
scanf("%d", &n);
for (int i = 1; i <= n; i++)
scanf("%d", &a[i]);
dfs(1, 0, 0, 0, 0);
printf("%d\n", ans);
}
}