地址链接:https://www.nowcoder.com/practice/908255677b6f4c18a9074c12f21acd59?tab=note
解题思路:
- 对于每一个数组元素的选择可以有三种,分别为分给第一个人、分给第二个人、或者丢弃,那我我们可以采用深度优先搜索+三种选择
- 注意:
1.递归结束条件
2.递归入口设计
#include<iostream>
#include<vector>
#include<algorithm>
#include<bits/stdc++.h>
using namespace std;
//定义全局变量位最少扔掉价值 #include<bits/stdc++.h>库
int res = INT_MAX;
void dfs(const vector<int> &v,int person1,int person2,int sum,int currindx,int length){
if(currindx == length){
if(person1 == person2){
res = min(res,sum-person1-person2);
}
return;
}
dfs(v,person1+v[currindx],person2,sum,currindx+1,length);//把v[currindx]分配给第一个人
dfs(v,person1,person2+v[currindx],sum,currindx+1,length);//把v[currindx]分配给第二个人
dfs(v,person1,person2,sum,currindx+1,length);//丢弃
}
int main(){
int t;
cin>>t;
while(t--){
int n;
cin>>n;
vector<int>v;
int temp;
int sum = 0;
for(int i = 0;i<n;++i){
cin>>temp;
v.push_back(temp);
sum +=temp;
}
dfs(v,0,0,sum,0,n);
cout<<res<<endl;
res = INT_MAX;//每一轮次重新赋值
}
return 0;
}