【dfs】拔河比赛(ybtoj dfs-1-1)
作者:互联网
拔河比赛
ybtoj dfs-1-1
题目大意
给你n个数,让你分成两堆,使其数量相差不大于1,问数值相差最小是多少
输入样例
1
3
55 50 100
输出样例
5
数据范围
1
⩽
T
⩽
50
1\leqslant T \leqslant 50
1⩽T⩽50
2
⩽
N
⩽
20
2\leqslant N\leqslant 20
2⩽N⩽20
30
⩽
W
i
⩽
120
30\leqslant W_i\leqslant 120
30⩽Wi⩽120
解题思路
因为N很小,直接枚举每个数放在哪边即可
代码
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
#define N 25
using namespace std;
int t, n, ans, a[N];
void dfs(int x, int l, int g)
{
if (x > n)
{
ans = min(ans, abs(g));
return;
}
if (l < (n + 1) / 2) dfs(x + 1, l + 1, g + a[x]);//放左边
if (x - l <= (n + 1) / 2) dfs(x + 1, l, g - a[x]);//右边
return;
}
int main()
{
scanf("%d", &t);
while(t--)
{
ans = 120*N;
scanf("%d", &n);
for (int i = 1; i <= n; ++i)
scanf("%d", &a[i]);
dfs(1, 0, 0);
printf("%d\n", ans);
}
return 0;
}
标签:int,ybtoj,dfs,120,拔河比赛,ans,include,leqslant 来源: https://blog.csdn.net/ssllyf/article/details/112387529