本文共 712 字,大约阅读时间需要 2 分钟。
由于本题数据过水,用爆搜即可过掉。
只考虑一个队伍,搜索每个人加不加进这个队伍里,若不加其实就是加进另一个队。 若当前加的人数未达半数,即可加进去; 若当前没加的人数未达半数,即可不加进去#include#include using namespace std;int t,n,m,ans,a[100];void dfs(int dep,int c1,int c2,int sum,int n)//c1记录一队人数,c2记录未加进一队的人数(二队人数),sum记录一队重量{ if(dep>n) { int sum2=m-sum;//另一队重量 ans=min(ans,abs(sum-sum2));//统计最小差值 } else { if(c1<(n+1)/2) dfs(dep+1,c1+1,c2,sum+a[dep],n); //当前加的人数未达半数,即可加进去 if(c2<(n+1)/2) dfs(dep+1,c1,c2+1,sum,n); //当前没加的人数未达半数,即可不加进去 }}int main(){ cin>>t; for(int i=1; i<=t; i++) { cin>>n; m=0; for(int j=1; j<=n; j++) { cin>>a[j]; m+=a[j];//统计总重量 } ans=0x7f7f7f7f;//ans统计最小答案,要初始化最大值 dfs(1,0,0,0,n); cout< <
转载地址:http://qhpwb.baihongyu.com/