又一年拔河问题
题目:T组数据,n个人,第n个人体重w[n],分成两组,两组人数最大差1,求两组体重差绝对值最小值
思路:一共分两组,设第一组体重和为w1,第二组为w2,则w1+w2=W,|w1-w2|=|2*w1-W|。所以只需要找出其中一组总重量的二倍与全部人总重量的差的绝对值的最小值就可以。所以只需要求其中一组总重量。因为两组人数最多相差1,所以其中一组的总人数一定是n/2,从而通过递归回溯的方法解决。
总程序:
#include<bits/stdc++.h>
using namespace std;
int w[21],W=0,wxmin=121,n;
void PaiXu(int x,int y,int z){ //x为新加的人的序号,y为总重量,z为当前组中人数
if(z==n/2){
if(abs(y-W/2)<wxmin){
wxmin=abs(y*2-W);
return;
}
}
if(x>n) return;
PaiXu(x+1,y,z); //选
PaiXu(x+1,y+w[x],z+1); //不选
}
int main(){
int T;
scanf("%d",&T);
for(int i=0;i<T;i++){
scanf("%d",&n);
W=0;wxmin=10001;
for(int j=1;j<=n;j++){
scanf("%d",&w[j]);
W+=w[j];
}
PaiXu(1,0,0);
printf("%d\n",wxmin);
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现