首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
800374
南京航空航天大学 C++
发布于江苏
关注
已关注
取消关注
@牛客题解官:
牛牛的背包问题
题目难度:三星考察点:二进制枚举、中途相遇法 方法1:暴力二进制枚举 分析:每个零食有放和不放两种情况,那么对于n个零食来说就有2^n种情况,我们对于这2^n种情况挨个判断每种情况的体积数是否超过背包容量w,如果没有超过背包容量就记录答案。Tips:注意结果用long long 算法实现:(0). 首先计算全部的状态all=(1<<n)。(1). 遍历这all种状态(2). 对于每种状态计算当前的体积值,如果体积值<=w,记录结果ans++(3). 输出结果 复杂度分析:时间复杂度:O(n*2^n)空间复杂度:O(n) 代码: #include <bits/stdc++.h>using namespace std;typedef long long LL;const int MAXN = 35;int a[MAXN];int main() { int n, w; cin>>n>>w; for(int i=0; i<n; i++) cin>>a[i]; int ans = 0; for(int i=0; i<(1<<n); i++) { LL sum = 0; for(int j=0; j<n; j++) { if(i&(1<<j)) sum += a[j]; } if(sum <= w) ans++; } cout<<ans<<endl; return 0;} 方法1:二进制枚举、二分、中途相遇法 分析:由于直接进行二进制枚举的算法时间复杂度太高显然是不可行的,那么我们可以借助中途相遇法的思想,将n个零食分为两部分[1, n/2],(n/2, n],然后枚举前一部分的所有可能取法,将这些可能取法用一个vector数组记录下来,然后枚举剩余的后一部分的所有可能取法,对于后一部分的可能取法获得其体积值,然后用tmp=背包容量值-当前体积值,我们只需要在前一部分的所有可能取法数组种找到第一个>tmp的下标,此时就知道在前一部分有多少个是满足条件的,将下标即个数记录到结果中。Tips:注意结果用long long 算法实现:(0). 将n件物品分为两部分,用数组v保存前一部分所有可能取法的体积值(1). 遍历剩余的后一部分的可能取法(2). 对于每种状态计算背包容量与当前体积值的差值tmp,然后在数组v中二分查找第一个大于tmp的值的下标,此时下标就是在前一部分中有多少种状态与当前体积相加之和满足不超过背包容量的个数。(3). 输出最终结果 复杂度分析:时间复杂度:空间复杂度:O() 代码: #include <bits/stdc++.h>using namespace std;typedef long long LL;const int MAXN = 35;int a[MAXN];int main() { int n, w; cin>>n>>w; for(int i=0; i<n; i++) cin>>a[i]; int half = n / 2; vector<LL> v; for(int i=0; i<(1<<half); i++) { LL sum = 0; for(int j=0; j<half; j++) { if(i&(1<<j)) sum += a[j]; } v.push_back(sum); } sort(v.begin(), v.end()); LL ans = 0; half = n-n/2; for(int i=0; i<(1<<half); i++) { LL sum = 0; for(int j=0; j<half; j++) { if(i&(1<<j)) sum += a[j+n/2]; } if(w-sum >= 0) ans += upper_bound(v.begin(), v.end(), w-sum)-v.begin(); } cout<<ans<<endl; return 0;}
点赞 3
评论 0
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
08-08 16:40
门头沟学院 嵌入式工程师
秋招记录06——影石嵌入式一面
这周的最后一场面试了,对于影石真的是又爱又恨,这次是第三次投递了,40分钟问了39个问题,希望能往下走走流程吧,面试的是音视频的部门,八股问的很简单,但是项目真的是深挖了,把我问出汗了都,对口的真的不一样啊1. 对我们公司的了解2. 怎么看待我们公司所处的行业3. 职业规划4. 介绍变量的作用域5. 在其他模块访问某个模块的变量应该怎么做6. 使用extern不太安全,还有什么其他的方法吗?使用函数封装的这种方式相比于extern有什么好处7. 如果有多个任务或线程访问变量,应该怎么办8. 条件变量应该怎么用9. 什么样的数据结构可以实现生产者消费者10. 消息队列的实现11. 实习或项目有用...
查看17道真题和解析
点赞
评论
收藏
分享
08-12 13:37
南华大学 Java
小红书你给这么多
看到了小红书顶尖实习生的薪资爆料,小红书你给这么多的吗
也不容易的大老虎很爱...:
博士那个略有耳闻,进面的都是5篇a起步
点赞
评论
收藏
分享
08-12 10:31
华中科技大学 Java
正在秋招找工作,求建议
bg:双九。实习。本人正在华子实习,但是确实感觉没学到什么东西,主要用Python做一些数据管理的工作,mt做的部分算法框架的工作也可以算我头上,其他的就是代码重构的活了。论文。论文是深度学习方面的,Python语言,但是现在还处于同行评审阶段,如果被拒真就完蛋。项目。上半年实习时做的是烂大街的JAVA后端开发,外卖项目,学的也不算精,只能说背八股选手(背的还一般)。现在就是感觉,这个简历做啥工作都不合适,后端开发经验太少,除非再做一个项目,其他的岗位又不知道能投什么。按照上面的话,建议接下来准备哪个方向好?
eleksj:
我感觉目标明确点,算法后端选一个吧,双9bg还是不错的,pdd上海可以考虑一下
投递华为等公司10个岗位
点赞
评论
收藏
分享
07-24 16:39
已编辑
门头沟学院 测试开发
上班也是舒服上了
第一次按摩是团建给的,你们团建是去哪儿呢😋
点赞
评论
收藏
分享
08-08 11:42
江苏科技大学 Java
真的燃尽了吗
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
总结常用的拖offer的几种话术
2.3W
2
...
8月份面经整理的算法高频题集合
7096
3
...
美团二笔还没发邮件
5233
4
...
快手 秋招 一面
3605
5
...
快手秋招-后端一面
3393
6
...
8.13快手秋招Java后端二面记录
3365
7
...
家里人一直跟我说要给领导买点东西,搞好关系
3332
8
...
救救孩子吧
2959
9
...
大家离职都怎么开口的啊?
2844
10
...
字节算法没做出来还有戏吗
2599
创作者周榜
更多
正在热议
更多
#
给26届的秋招建议
#
29119次浏览
816人参与
#
应届生初入职场,求建议
#
239068次浏览
2681人参与
#
实习的内耗时刻
#
44670次浏览
523人参与
#
发工资后,你做的第一件事是什么
#
71778次浏览
241人参与
#
工作上你捅过哪些篓子?
#
18309次浏览
120人参与
#
秋招投递记录
#
26571次浏览
299人参与
#
在职场上,你最讨厌什么样的同事
#
27240次浏览
192人参与
#
我的秋招“寄”录
#
37290次浏览
477人参与
#
网易求职进展汇总
#
112766次浏览
1063人参与
#
秋招,不懂就问
#
10263次浏览
108人参与
#
我的国央企投递进展
#
51799次浏览
312人参与
#
查收我的offer竞争力报告
#
195602次浏览
1291人参与
#
我的AI电子员工
#
12704次浏览
102人参与
#
你最近一次加班是什么时候?
#
79469次浏览
420人参与
#
独居后,你的生活是更好了还是更差了?
#
12027次浏览
167人参与
#
你上一次给父母打电话是什么时候
#
11676次浏览
111人参与
#
如果校招重来我最想改变的是
#
278218次浏览
2896人参与
#
规定下班时间vs实际下班时间
#
19218次浏览
152人参与
#
运营每日一题
#
90484次浏览
798人参与
#
如果你有一天可以担任公司的CEO,你会做哪三件事?
#
32357次浏览
488人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务