首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
07-28 16:20
已编辑
快手_广告_Java开发(实习员工)
深势科技 二面(第一次遇到提前进会议的面试官)
面试官人非常的好,我是提前5分钟进入的会议,发现面试官已经在会议上了(!!!第一次遇到)自我介绍介绍实习在快手主要是做的什么业务在实习的过程当中一定是遇到一些困难的,或者亮点你来说一些挑其中一个对于你成长比较大的一个点来去说(说的低效素材的清理里面的详细细节)那你觉得这个项目下来对你来说最难的一个点是哪里呢(说的是整体的方案设计)这个低效素材是如何去识别的呢低效素材的数量是多长时间来去更新的呢(设置的是当天0点为redis过期时间)前端的5s一个轮训去查询,如果我的用户数量翻了10倍,怎么保证服务端的一个稳定性如果在redis里面的数据都在0点过期怎么解决(缓存雪崩问题)简历上的慢SQL怎么发...
查看11道真题和解析
点赞
评论
收藏
分享
昨天 14:05
河北科技大学 汽车设计
小鹏效率还是太高了
挂的真快
投递小鹏汽车等公司10个岗位
点赞
评论
收藏
分享
06-26 11:08
北华航天工业学院 嵌入式软件开发
已经不知道该怎么办了,是简历有问题吗😭😭
半解316:
内容充实,细节需要修改一下。 1,整体压缩为一页。所有内容顶格。 2,项目描述删除,直接写个人工作量 修改完之后还需要建议,可以私聊
点赞
评论
收藏
分享
06-12 18:03
河北软件职业技术学院 Python
25毕业生没实习
快要崩溃了,都给干上限了
不会acac只会wa...:
你这要是能找到,那我赤了三年的屎算什么
听劝,我这个简历该怎么改...
点赞
评论
收藏
分享
昨天 14:20
门头沟学院 Java
地平线挂
绷不住了,刷到其他帖子硕技术岗基本只要清北,如果真的是这样的话,那怪我误闯天家了...
投递地平线等公司10个岗位
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
百度提前批,三面被推迟一周,喜提秋招第一凉
4665
2
...
虾皮秋招一面
3175
3
...
QQ提前批一面凉经
2965
4
...
他拿大厂SSP Offer打牌是什么概念啊?25届双非之光
2600
5
...
百度提前批 三面
2317
6
...
7.30滴滴提前批一面凉经
2104
7
...
7.30百度提前批一面
1801
8
...
小鹏offer
1468
9
...
上班一周,工资还没拿,先欠公司两千
1457
10
...
百度7.30二面
1346
创作者周榜
更多
正在热议
更多
#
简历上的经历如何包装
#
27433次浏览
788人参与
#
秋招被确诊为……
#
162931次浏览
735人参与
#
中兴秋招
#
204787次浏览
2288人参与
#
工作中哪个瞬间让你想离职
#
62376次浏览
564人参与
#
你最希望上岸的公司是?
#
134833次浏览
702人参与
#
和同事相处最忌讳的是__
#
23181次浏览
236人参与
#
你最近一次加班是什么时候?
#
70943次浏览
350人参与
#
26届的你,投了哪些公司?
#
41301次浏览
465人参与
#
你遇到最难的面试题目是_
#
16130次浏览
196人参与
#
我对___祛魅了
#
46010次浏览
420人参与
#
研究所VS国企,该如何选
#
194740次浏览
1819人参与
#
地平线求职进展汇总
#
52597次浏览
369人参与
#
如果校招重来我最想改变的是
#
271677次浏览
2849人参与
#
你跟室友的关系怎么样?
#
6756次浏览
105人参与
#
你最讨厌面试问你什么?
#
27235次浏览
305人参与
#
如果可以选,你最想从事什么工作
#
565748次浏览
4699人参与
#
柠檬微趣工作体验
#
6625次浏览
40人参与
#
什么样的背景能拿SSP?
#
35301次浏览
212人参与
#
海康威视求职进展汇总
#
493980次浏览
3625人参与
#
秋招前后对offer的期望对比
#
302969次浏览
2229人参与
#
如何快速融入团队?
#
16038次浏览
200人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务