题解 | #平分物品#

平分物品

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;
}
大厂笔试题题解 文章被收录于专栏

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

全部评论

相关推荐

一个菜鸡罢了:哥们,感觉你的简历还是有点问题的,我提几点建议,看看能不能提供一点帮助 1. ”新余学院“别加粗,课程不清楚是否有必要写,感觉版面不如拿来写一下做过的事情,教育经历是你的弱势就尽量少写 2. “干部及社团经历”和“自我评价”删掉 3. 论文后面的“录用”和“小修”啥的都删掉,默认全录用,问了再说,反正小修毕业前肯定能发出来 4. 工作经验和研究成果没有体现你的个人贡献,着重包装一下个人贡献
点赞 评论 收藏
分享
听说改名字就能收到offer哈:Radis写错了兄弟
点赞 评论 收藏
分享
3 收藏 评论
分享
牛客网
牛客企业服务