拔河比赛(回溯)

【问题描述】 一个学校举行拔河比赛,所有的人被分成了两组,每个人必须(且只能够)在其中的一组,要求两个组的人数相差不能超过1,且两个组内的所有人体重加起来尽可能地接近。 【输入格式】 输入数据的第1行是一个n,表示参加拔河比赛的总人数,n<=100,接下来的n行表示第1到第n个人的体重,每个人的体重都是整数。

复制代码
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int a[21],n,sum,res;
 4 void dfs(int x,int y,int z)
 5 {
 6     if(y==n/2) 
 7     {
 8         res=min(res,abs(z*2-sum));
 9         return ;
10     }
11     if(x>n) return ;
12     dfs(x+1,y,z);
13     dfs(x+1,y+1,z+a[x]);
14 }
15 int main()
16 {
17     int t;
18     cin>>t;
19     while(t--)
20     {
21         cin>>n;
22         sum=0;
23         for(int i=1;i<=n;i++)
24         {
25             cin>>a[i];
26             sum+=a[i];
27         }
28         res=1000000;
29         dfs(1,0,0);
30         cout<<res<<endl;
31     }
32     return 0;
33 }
复制代码

 

posted @   jetaim  阅读(456)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示