文章目录

  • 一、题目描述
  • 二、解题思路
  • 三、C++代码
  • Reference

一、题目描述

现在有n个物品,每一个物品都有一个价值,现在想将这些物品分给两个人,要求这两个人每一个人分到的物品的价值总和相同(个数可以不同,总价值相同即可),剩下的物品就需要扔掉,现在想知道最少需要扔多少价值的物品才能满足要求分给两个人。

要求:时间复杂度O(3n)O(3^n)O(3n),空间复杂度O(n)O(n)O(n)

输入描述

第一行输入一个整数 T,代表有 T 组测试数据。
对于每一组测试数据,一行输入一个整数 n ,代表物品的个数。接下来 n 个数,a[i] 代表每一个物品的价值。1<= T <= 10
1 <= n <= 15
1 <= a[i] <= 100000

输出描述:

对于每一组测试数据,输出一个答案代表最少需要扔的价值。

测试用例:

输入:
1
5
30 60 5 15 30输出:20栗子说明:样例解释,扔掉第三个和第四个物品,然后将第一个物品和第五个物品给第一个人,第二个物品给第二个人,每一个人分到的价值为60,扔掉的价值为20。

二、解题思路

dfs遍历,每个节点的子结点中,有三种情况:给第一个人,给第二个人,丢掉。

几个变量说明:
n:需要选择的物品的总共数量。
sum:所有元素的总和。
全局变量res:找出满足情况的最值res,min(res, sum - result1 - result2)

dfs的递归边界是遍历到最后一个元素,并且结束条件:搜索到最后一个物品时,判断res1和res2两者是否相等,如果相等则记录并更新res值。

三、C++代码

#include <iostream>
#include<vector>
#include<algorithm>
#include<limits.h>
using namespace std;// 最小扔掉的价值
int res = INT_MAX;
void dfs(vector<int>& nums, int res1, int res2, int sum, int index, int n){//一直选到最后一个数字才返回if(index == n){if(res1 == res2){res = min(res, sum - res1 - res2);//res = sum - res1 - res2;}return;}// 每次的选择环节都有3种选择dfs(nums, res1 + nums[index], res2, sum, index + 1, n);dfs(nums, res1, res2+ nums[index], sum, index + 1, n);dfs(nums, res1, res2, sum, index + 1, n);
}int main (){int t;cin >> t; // 组数while(t--){int n;//该组的物品总数cin >> n;int temp; //当前存入值vector<int> nums;for(int i =0; i < n ; i++){cin >> temp;nums.push_back(temp);}// 计算该组的元素总和int sum = 0;for(auto i : nums){sum += i;}//vector,res1和res2和index初始都是0,sum需单独设变量存起来dfs(nums, 0, 0, sum, 0, n);cout<<res<< endl;res = INT_MAX;}system("pause");return 0;
}

Reference

https://www.nowcoder.com/question/next?pid=27972361&qid=1262805&tid=51115874

【网易算法提前批】平分物品相关推荐

  1. 百度算法提前批 面试复盘

    作者 | liu_sy 来源 | 见文末『阅读原文』处 整理 | NewBeeNLP公众号 写在前面 之前通过非定向内推提前批,简历一直处于筛选状态中,然后大概在8.18在牛客看到一个前辈所在部门(推 ...

  2. 2021届图像/计算机视觉算法提前批的面经 | 附内推码

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者:雲水謡 来源:https://www.nowcoder.com ...

  3. 内推 | 字节跳动算法提前批

    点上方计算机视觉联盟获取更多干货 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:字节跳动 AI博士笔记系列推荐 周志华<机器学习>手推笔记正式开源!可打印版本附pdf下载链接 - ...

  4. 2020年网易校招提前批JAVA岗笔试第一题

    题目描述: 给出一个班级的总人数n,给出每个人的分数.计算一个百分数p.公式为: 题目分析: 首先可以看出,n很大,q很大,但是ai比较小,这时可以基于成绩先行统计好,在每次询问时可以用O(1)的复杂 ...

  5. 网易游戏移动端开发暑期实习提前批总结

    网易游戏移动端开发暑期实习生提前批总结 0.关于个人 广东某一本大三学生,日常咸鱼,没做啥项目,想找个暑期实习的机会锻炼一下自己,为以后秋招谋谋出路,听了网易游戏在学校的宣讲后,报了移动端开发的提前批 ...

  6. 面试记录-美团提前批(AI 专场)【已拿offer】

    序 美团点评在7月4号发布了[直通秋招 | 美团2019校园招聘AI算法提前批面试专场启动报名],抱着试一下的态度申请了8月12号的场,但是并没有接到面试通知,之后接到工作人员的电话说搞错了,之后安排 ...

  7. 网易2020校招数据分析方向提前批笔试题解析

    网易2020校招数据分析方向提前批笔试题 选择题 简答题 编程题 选择题 有一类二叉树用三叉链表来存储的时候除了带有指向左右孩子节点的两个指针,还有指向父节点的指针,那么这样一棵二叉树有2个节点,那么 ...

  8. 百度 2022 提前批-数据挖掘算法工程师面经

    百度 2022 提前批-数据挖掘算法工程师面经 一面 二面 三面 一面 之前准备的一直都是后端的东西,实际上自己做的是很算法很理论的方向,在找工作的过程中也发现了可能如果找后端的工作我是真的没有任何优 ...

  9. 视频编解码算法工程师岗位校招及提前批记录(持续更新)

    今年的提前批好像有点早呀,7月8月有的忙了: 1.大疆有视频算法工程师岗位,6月份开始投简历,前几天让做了性格测试,不知道会被会卡在这关,等消息中: 7月8号做了笔试,笔试出的非常专业,都是与视频编码 ...

最新文章

  1. Matlab与线性代数 -- 正态分布的随机矩阵
  2. cannot resolve symbol r_64位ret2_dl_runtime_resolve模版题以及踩坑记录
  3. react 前端解析二进制流_一年半前端跳槽面试经验(头条、微信、shopee)
  4. mysql连接代替子查询_MySQL优化之使用连接(join)代替子查询
  5. LeetCode.31 下一个排列
  6. 计算机使用维护教程,《计算机使用与维护教程》教学大纲.doc
  7. java学习 类变量 类方法_这篇文章主要介绍了JAVA类变量及类方法代码实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下类变量(...
  8. 简单算术表达式计算器
  9. jdk动态代理为什么只能为接口生成代理类?
  10. PLC实训 — PLC的27条基本逻辑指令
  11. 阿里云服务器如何使用
  12. 全国计算机三级网络技术题库南开,计算机三级网络技术上机题库《南开100题》最新版...
  13. PhotoShop 常用技巧记录
  14. 【阅】天才在左 疯子在右
  15. android 添加日历事件,android 本地日历插入事件
  16. Kaggle无法出现人机验证的解决办法
  17. GraphQL(四):GraphQL工程化实践
  18. Mac下使用Parallel Desktop进行虚拟机的网络配置
  19. 上海个人住房公积金复议材料
  20. ROS2极简总结-Nav2-行为树

热门文章

  1. 论文解读:CFC-NET
  2. 创建好的小程序如何正式发布?
  3. 上饶多措并举落实 国稻种芯·中国水稻节:江西粮稳产丰收
  4. c50弹性模量计算_C50混凝土配合比设计计算书
  5. 微信小程序全栈开发实践 第二章 微信小程序组件介绍及使用 -- 2.10 image组件,如何实现图片懒加载?
  6. 研究生论文投稿时,如何找到投稿编辑社的联系信息。
  7. 自定义体温折线图html,科学老师布置体温折线图作业,家长打算交“备孕表”代替...
  8. python高级特性_Python高级特性
  9. 设计模式学习-观察者模式
  10. One Game 第一周获奖名单