今天晚上的华为笔试第三题有做出来的吗?求思路

耗了一个半小时也没做出来,凉凉#笔试题目#
全部评论
来个 Python AC的 coding=utf-8 def bag(n, c, w, v): res = [[-1 for j in range(c + 1)] for i in range(n + 1)] for j in range(c + 1): res[0][j] = 0 for i in range(1, n + 1): for j in range(1, c + 1): res[i][j] = res[i - 1][j] if j >= w[i - 1] and res[i][j] < res[i - 1][j - w[i - 1]] + v[i - 1]: res[i][j] = res[i - 1][j - w[i - 1]] + v[i - 1] return res def show(n, c, w, res): x = [0 for i in range(n)] j = c for i in range(n,0,-1): if res[i][j] > res[i - 1][j]: x[i - 1] = 1 j -= w[i - 1] for i in range(n): if x[i]==1: print(i+1), if name == 'main': c = int(raw_input()) w = raw_input() w = w.split() for i in range(len(w)): w[i] = int(w[i]) v = raw_input() v = v.split() for i in range(len(v)): v[i] = int(v[i]) n = len(v) res = bag(n, c, w, v) show(n, c, w, res)
点赞 回复 分享
发布于 2018-04-03 22:56
来个java版的 全ac的背包   public static void main(String[] args) { Scanner sc = new Scanner(System.in); int money = sc.nextInt(); List<Integer> list = new ArrayList<>(); while (sc.hasNext()) { list.add(sc.nextInt()); } int[] cost = new int[list.size() / 2]; int[] earn = new int[list.size() / 2]; int[] chosen = new int[list.size() / 2]; for (int i = 0; i < list.size(); ++i) { if (i < list.size() / 2) { cost[i] = list.get(i); chosen[i] = 0; } else { earn[i - list.size() / 2] = list.get(i); } } // d[i][j]表示前i个物品放入容量为j的背包的最大价值 // d[i][j] = max(d[i-1][j], d[i-1][j-weights[i]] + values[i]) int[][] d = new int[cost.length][money + 1]; for (int i = 0; i < d.length; ++i) { for (int j = 1; j < money + 1; ++j) { if (i == 0) { if (cost[i] <= j) { d[i][j] = cost[i]; } } else { if (j >= cost[i]) { d[i][j] = Math.max(d[i - 1][j], d[i - 1][j - cost[i]] + earn[i]); } else { d[i][j] = d[i - 1][j]; } } } } int ii = cost.length - 1, jj = money; while (ii >= 0) { if (ii > 0) { if (jj-cost[ii] >= 0 && d[ii][jj] == d[ii - 1][jj - cost[ii]] + earn[ii]) { chosen[ii] = 1; jj -= cost[ii]; } } else { if (cost[ii] <= jj) { chosen[ii] = 1; } } ii--; } boolean first = true; for (int i = 0; i < chosen.length; ++i) { if (chosen[i] == 1) { if (first) { System.out.print(i + 1); first = false; } else { System.out.print(" " + (i + 1)); } } } }
点赞 回复 分享
发布于 2018-04-03 22:50
背包问题输出背包序列。
点赞 回复 分享
发布于 2018-04-04 08:25
典型背包问题,5分钟AC
点赞 回复 分享
发布于 2018-04-03 23:39
01背包记录路径
点赞 回复 分享
发布于 2018-04-03 23:01
solve(); function solve () {     let         total = parseInt(readline()), // 总流量         consume = readline().split(/\s+/).map(s => Number(s)), // 每个app消耗的流量         coin = readline().split(/\s+/).map(s => Number(s)); // 每个app的金币数     let buffer = [];     for (let i = 0; i < consume.length + 1; i++) {         buffer[i] = [0];     }     for (let w = 0; w < total + 1; w++) {         buffer[0][w] = 0;     }     for (let w = 1; w < total + 1; w++) {         for (let i = 1; i < consume.length + 1; i++) {             if (consume[i - 1] > w) {                 buffer[i][w] = buffer[i - 1][w];             } else {                 buffer[i][w] = Math.max(buffer[i - 1][w], coin[i - 1] + buffer[i - 1][w - consume[i-1]]);             }         }     }     let result = [];     let w = total;     for (let i = consume.length; i > 0; i--) {         if (buffer[i][w] === buffer[i-1][w]) {             continue;         } else {             result.push(i);             w -= consume[i - 1];         }     }     print(result.reverse().join(' ')); } 背包的解法
点赞 回复 分享
发布于 2018-04-03 22:20
背包60+1 dp数据我一步一步演算的,还是过不了神奇的测试用例
点赞 回复 分享
发布于 2018-04-03 21:27
背包60,不知道为什么
点赞 回复 分享
发布于 2018-04-03 21:22
直接递归就AC了
点赞 回复 分享
发布于 2018-04-03 21:22
深搜,第一遍深搜找最大价值,第二遍深搜找路径(本来想用背包做的,发现不会记录路径就换方法了)
点赞 回复 分享
发布于 2018-04-03 21:20

相关推荐

点赞 评论 收藏
分享
作为带过好几个实习生的老mentor,我见过有同学带着一腔热血来实习,最后却只带走一份单薄的履历。实习,是你从学校到职场最关键的过渡期,它的价值远不止一份实习证明。今天,我不讲大道理,就从我作为Mentor的视角,给你们几条能立刻用上的建议。记住,你的目标不是当个好学生,而是成为一个值得信赖的职场新人。一、&nbsp;心态转变:从被动答题到主动解题这是我最想强调的一点。学生思维是:等待老师布置明确的作业,然后完成它。职场思维是:主动发现模糊的问题,然后解决它。反面事例:接到任务后,埋头就做,遇到困难不吭声,直到截止日期才说“这个我不会”。Mentor期待的是啥呢?首先是确认目标:接到任务后,先用自己的话复述一遍:“我理解这个任务是要达成XX效果,对吗?”&nbsp;确保方向没错。然后是主动思考:不要只带问题来,要带“选择题”。问“这个数据我不会查,我尝试了A和B方法都失败了,您看是方法C更合适,还是我有其他没考虑到的渠道?”&nbsp;这证明了你的思考和努力。最后是闭环思维:任务完成后,主动告知结果:“XX任务已完成,数据/文件已发您邮箱,并同步在团队网盘了。其中有个小发现是……,供您参考。”&nbsp;让一切有始有终。二、&nbsp;沟通方式:实习生的很多错误,都源于“想当然”和“不敢问”。反面教材:在做一个PPT时,因为不确定公司模板,就套用了自己觉得好看的模板,结果不能用。那么怎么确认,怎么提问呢?第一个,不懂就问,但别重复问:第一次问,是学习;同样的问题问第三次,就是不用心。准备一个笔记本,把关键信息、操作流程、注意事项都记下来。第二个,及时汇报,别等追问:特别是遇到卡壳或可能延期时,一定要提前说。Mentor不怕你慢,就怕你失联。没事儿更新一下进度:目前已完成80%,但在XX环节遇到点阻力,正在想办法沟通等回复,预计今天下班前确定结果,到时候给您,这样说能让人极度安心。第三个,珍惜1on1机会:和Mentor的定期沟通,不是你被动接受批评,而是你主动获取信息和反馈的黄金时间。提前准备好:a)&nbsp;本周工作进展;b)&nbsp;遇到的困惑/挑战;c)&nbsp;希望学习的新技能;d)&nbsp;对团队业务的任何好奇。三、&nbsp;工作习惯:&nbsp;专业性体现在细节里职业素养不是空话,它藏在每一个你容易忽略的细节中。1.&nbsp;邮件/沟通软件礼仪:邮件:标题清晰(如【实习生XX-XX项目周报】),正文称呼得体,结尾有落款。别用“在吗?”开头。工作群:别发表情包刷屏,沟通事情简明扼要。收到任务或通知,回复“收到,谢谢”,这是基本的确认和尊重。2.&nbsp;文件管理与命名:我会观察实习生的桌面,看他们的使用习惯,乱糟糟的桌面说明他没条理。文件命名要使用统一的命名规则:日期_项目名_内容_版本_姓名。例如:20231027_秋招海报_初版_张三。这能为整个团队节省大量沟通成本。3.&nbsp;对待杂活的态度:复印、整理数据、会议纪要……这些dirty&nbsp;work是不可避免的。但优秀的人是能从中找到价值的:整理数据时,可以留意数据之间的关联或异常,做会议纪要时,可以梳理出会议的决策和待办事项。四、&nbsp;终极目标:带走三样东西1.&nbsp;一段能讲出STAR法则的实战经历:这直接决定了你未来求职简历的厚度。2.&nbsp;一位可以为你未来背书的Mentor/同事:好好表现,离职时保持联系,他们可能成为你未来求职的推荐人和内推渠道。3.&nbsp;对行业和岗位的真实认知:通过这次实习,你想清楚自己是更热爱这个行业,还是想赶紧跑路?这个答案,价值千金。最后,作为你们的Mentor,我想说:大胆去试,勇敢去问,别怕犯错。实习期是你犯错成本最低的时候。展现出你的靠谱、主动和思考,我们做Mentor的,会非常乐意把更核心的任务交给你,因为带你,也是在为团队培养未来的战友。希望这些建议能帮你少走弯路,打一场漂亮的实习战!
家族企业:实习一年比在大学多年都有用
第一次找实习,我建议__
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务