题解 | #平分物品#

平分物品

http://www.nowcoder.com/practice/908255677b6f4c18a9074c12f21acd59

  1. 转换成我们拿最大(二者相等)的时候,然后sum一减,就可以知道那个最小的剩余是多少。(在进行一次转换,取次次差得最小值)
  2. 然后在转换成以每一个物品为基础,分为三种情况进行讨论。
#include<bits/stdc++.h>
using namespace std;

int res = INT_MAX;
void dfs(vector<int> item, int result1, int result2, int sum, int index, int n){

    //base case 1
    if(index==n){//物品已经选择完了
        //base case 2 得两人选择结果相同才行
        if(result1==result2){
            res = min(res,sum-result1-result2);
        }
        return;//返回重新选择(不管是不是满足条件,反正我物品已经选择完了)
    }


    //三种选择
    dfs(item, result1+item[index],result2, sum,index+1,n);
    dfs(item, result1,result2+item[index], sum,index+1,n);
    dfs(item, result1,result2, sum,index+1,n);

}



int main(){

    int T,n,x;
    cin>>T;
    while(T--){
        cin>>n;
        vector<int> item;
        for(int i=0; i<n;i++){
            cin>>x;
            item.push_back(x);
        }
        int sum = 0;//计算物品总价值
        for(int i=0; i< n;i++){
            sum+= item[i];
        }

        dfs(item,0,0,sum,0,n);
        cout<<res<<endl;
        res = INT_MAX;
    }


    return 0;
}
大厂笔试题题解 文章被收录于专栏

主要是公司笔试题得一些总结

全部评论

相关推荐

SinyWu:七院电话面的时候问我有没有女朋友,一听异地说你赶紧分。我:???
点赞 评论 收藏
分享
点赞 评论 收藏
分享
3 收藏 评论
分享
牛客网
牛客企业服务