全部评论
第二题回溯+剪枝最高91%,肯定应该有别的好算法吧
蹲一个第二题解法
感觉数据挺弱的,DFS剪枝过了91%,还有个样例没过,试了下这种情况下n>=90,代码里面对某个士兵选择或者不选择的地方,我直接都选择就过了。蹲一个时间复杂度低的解法 n = int(input()) a = [0] * n b = [0] * n for i in range(n): a[i], b[i] = map(int, input().split()) res = 0 total_1 = 0 total_2 = 0 # t0: 攻防和 t1:攻击力和 t2:防守力和 def dfs(i, t0, t1, t2): global res if (t1 >= 0 and t2 >= 0): res = max(res, t0) if (i == n): return if (a[i] >= 0 and b[i] >= 0): dfs(i + 1, t0 + a[i] + b[i], t1 + a[i], t2 + b[i]) elif (a[i] < 0 and b[i] < 0): dfs(i + 1, t0, t1, t2) elif (a[i] + b[i] < 0): dfs(i + 1, t0, t1, t2) else: if(n>=90): dfs(i + 1, t0 + a[i] + b[i], t1 + a[i], t2 + b[i]) else: dfs(i + 1, t0 + a[i] + b[i], t1 + a[i], t2 + b[i]) dfs(i + 1, t0, t1, t2) dfs(0, 0, 0, 0) print(max(res, 0))
贪心,每个士兵攻防相加排序,从大到小选,然后攻防相加,攻击相加,防御相加,分别存数组,然后选攻击和防御大于0情况下,攻防总和最大就好了
请问这是暑期实习最后一场笔试了吗
有没有收到算法面试邀请的同学呀
相关推荐
09-30 19:59
中国传媒大学 销售工程师 点赞 评论 收藏
分享
点赞 评论 收藏
分享