拔河比赛(回溯)
【问题描述】 一个学校举行拔河比赛,所有的人被分成了两组,每个人必须(且只能够)在其中的一组,要求两个组的人数相差不能超过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 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!