pdd9.28笔试 4a3记录
1. 签到题,知道ASCII码怎么计算就行
2. 给一个initial数组,代表层序遍历一棵树的节点的权值(0代表空节点),节点权值只有1,2,3,4,5五种可能,然后给你一个target数组,要求通过操作把树的节点权值变成这个数组,操作是:选中一个节点,则该节点及其子树的所有节点的权值+1(如果超过5,变回1)。 问从initial变成target的最小操作次数
可以边遍历边维护一个cum_diff[i], 代表i和i的所有父节点的已操作次数, 对于节点idx, (idx-1)>>1获得其父节点下标,进而获得所有父节点操作次数,当前节点还需操作: ( (初始需操作次数 - 所有父节点操作次数)% 5) %5 次
p.s. 这题90%很可能是没考虑空树
3. 有n(1<=n<=100)个魔法课程,每个魔法课需要mana[i]点法力学习,学习后能增强power[i]点法强,你只有M(1<=M<=1000)点法力值来学习,同时呢,你可以选择不同的楼层学习课程,共有m(1<=m<=5)个楼层,每个楼层有一个bonus[j](1<=bonus<=3), 即在第j层学习时,增强的法强和消耗的法力都×bonus[j], 你必须按顺序学习课程。 问你可以获得的最大法强
一开始直接回溯做的,想剪枝剪了好久,然后发现,回溯优化一下不就是记忆化搜索,记忆化搜索优化一下不就是动态规划?
于是直接开始dp, dp[i][j][k] 代表拥有法力k时,在第j层学习第i个课程后的法强最大值,更新的时候我是用的四重循环,要注意只有dp[i-1][floor][k]>0 且 k>=cost 的时候,才进行max(dp[i][j][k], dp[i-1][floor][k] + bonus[j]*power[i])的更新
第四题,由于第三题先写回溯,再优化回溯,再换成dp,再改dp的错,改了一个半小时,第四题根本没时间做了,只记得大鱼吃小鱼()
#我的秋招日记##秋招笔试记录##0offer互助地##算法岗#
2. 给一个initial数组,代表层序遍历一棵树的节点的权值(0代表空节点),节点权值只有1,2,3,4,5五种可能,然后给你一个target数组,要求通过操作把树的节点权值变成这个数组,操作是:选中一个节点,则该节点及其子树的所有节点的权值+1(如果超过5,变回1)。 问从initial变成target的最小操作次数
可以边遍历边维护一个cum_diff[i], 代表i和i的所有父节点的已操作次数, 对于节点idx, (idx-1)>>1获得其父节点下标,进而获得所有父节点操作次数,当前节点还需操作: ( (初始需操作次数 - 所有父节点操作次数)% 5) %5 次
p.s. 这题90%很可能是没考虑空树
3. 有n(1<=n<=100)个魔法课程,每个魔法课需要mana[i]点法力学习,学习后能增强power[i]点法强,你只有M(1<=M<=1000)点法力值来学习,同时呢,你可以选择不同的楼层学习课程,共有m(1<=m<=5)个楼层,每个楼层有一个bonus[j](1<=bonus<=3), 即在第j层学习时,增强的法强和消耗的法力都×bonus[j], 你必须按顺序学习课程。 问你可以获得的最大法强
一开始直接回溯做的,想剪枝剪了好久,然后发现,回溯优化一下不就是记忆化搜索,记忆化搜索优化一下不就是动态规划?
于是直接开始dp, dp[i][j][k] 代表拥有法力k时,在第j层学习第i个课程后的法强最大值,更新的时候我是用的四重循环,要注意只有dp[i-1][floor][k]>0 且 k>=cost 的时候,才进行max(dp[i][j][k], dp[i-1][floor][k] + bonus[j]*power[i])的更新
第四题,由于第三题先写回溯,再优化回溯,再换成dp,再改dp的错,改了一个半小时,第四题根本没时间做了,只记得大鱼吃小鱼()
#我的秋招日记##秋招笔试记录##0offer互助地##算法岗#
全部评论
我第二题用的懒标记就是90%,一直没找到什么问题,空树正常输出0没问题吧
相关推荐
昨天 21:08
武汉大学 Java 点赞 评论 收藏
分享
09-27 23:20
门头沟学院 嵌入式软件工程师 点赞 评论 收藏
分享