算法比赛模拟题精解之“Tairitsu and Dynamic Objects”

简介: 根据题意,分析得知,Hikari 和 Tairitsu 每次会优先选择 ai+bi 的值最大的物品,当物品的 ai+bi 值相等时,选择bi大的那个。

在线编程介绍

阿里云开发者社区在线编程产品,针对广大开发者学习、实践、面试、应聘、考试认证等打造的免费在线刷题神器。题库来自笔试模拟题、算法大赛模拟题等,界面整洁明了,操作简单,为用户营造专心答题的学习环境。点击链接开始体验:https://developer.aliyun.com/coding

本文为大家介绍其中的 第114题:Tairitsu and Dynamic Objects 的题目解析,具体如下:

题目描述

题目等级:容易
知识点:贪心

查看题目:Tairitsu and Dynamic Objects
Hikari 和 Tairitsu 面前有n个物品,这些物品编号为1,2,...,n。
每个物品有两个属性。第 i 个物品的两个属性分别为ai, bi 。
初始 n 个物品均可被选取。Hikari 与 Tairitsu 会轮流选取当前可选取的物品中的一个,并把它拿走,这个物品之后不可被选取。第一轮 Hikari 先选取。
设 Hikari 选取的物品编号的集合为H ,Tairitsu 选取的物品编号的集合为T 。
所有物品均被选取完之后,Hikari 得分为∑ai(i∈H) ;而 Tairitsu 得分为 ∑bi(i∈T) 。
Hikari 和 Tairitsu 都希望自己的得分比对方大,你需要求出双方都使用最优策略的情况下,双方各会获得多少分。
注意:若对于某个人来说,剩余的物品中有多个对两人分数大小关系影响相同的物品,那么他会优先选择bi 最大的那个。
输入一个正整数n,表示物品个数。
再输入两个数组a和b,分别表示n个物品的A属性和n个物品的B属性。(保证1<=n<=2*1e5, 0<=ai,bi<=1e9)
输出一行,两个整数分别表示Hikari和Tairitsu的得分。

示例1
输入:
5
[1,2,3,4,5]
[5,4,3,2,1]
输出:
[9,6]

解题思路:

根据题意,分析得知,Hikari 和 Tairitsu 每次会优先选择 ai+bi 的值最大的物品,当物品的 ai+bi 值相等时,选择bi大的那个。

因此,可以对物品进行排序,排序有两个依据,优先依据 ai+bi 的值,然后是bi的值。降序排好后,Hikari 和 Tairitsu 依次按顺序选择物品,Hikari先选择,选择好以后,分别计算Hikari 和 Tairitsu 的分数即可。

时间复杂度:O(n)
空间复杂度:O(1)

看完之后是不是有了想法了呢,快来练练手吧>>查看题目:Tairitsu and Dynamic Objects

相关文章
|
存储 算法 Python
算法专题1——动态规划 Dynamic Programming,DP
算法专题1——动态规划 Dynamic Programming,DP
104 0
|
8月前
|
算法 搜索推荐 Java
Java数据结构 -- 常见算法分析(查找算法、排序算法)精解详解!!!
Java数据结构 -- 常见算法分析(查找算法、排序算法)精解详解!!!
70 0
|
8月前
|
机器学习/深度学习 存储 算法
算法·动态规划Dynamic Programming
算法·动态规划Dynamic Programming
46 0
|
8月前
|
算法 测试技术 C++
【动态规划】【C++算法】2188. 完成比赛的最少时间
【动态规划】【C++算法】2188. 完成比赛的最少时间
|
8月前
|
算法
leetcode-675:为高尔夫比赛砍树 (最短路径算法bfs,dijkstra,A*)
leetcode-675:为高尔夫比赛砍树 (最短路径算法bfs,dijkstra,A*)
62 0
|
8月前
|
算法 容器
【算法训练营】栈合集(1) 剑指 Offer 31. 栈的压入、弹出序列 || 32. 最长有效括号 || 682. 棒球比赛 || 面试题 03.01. 三合一
【算法训练营】栈合集(1) 剑指 Offer 31. 栈的压入、弹出序列 || 32. 最长有效括号 || 682. 棒球比赛 || 面试题 03.01. 三合一
59 0
|
算法
算法分享三个方面学习方法(做题经验,代码编写经验,比赛经验)
算法分享三个方面学习方法(做题经验,代码编写经验,比赛经验)
86 0
|
算法 调度
【数学建模】2022数维杯比赛(模拟退火优化算法、NSII求解)大规模新型冠状病毒疫情最优应对策略研究(Matlab代码实现)
【数学建模】2022数维杯比赛(模拟退火优化算法、NSII求解)大规模新型冠状病毒疫情最优应对策略研究(Matlab代码实现)
124 0
|
机器学习/深度学习 开发框架 编解码
动手学强化学习(三):动态规划算法 (Dynamic Programming)
动态规划(dynamic programming)是程序设计算法中非常重要的内容,能够高效解决一些经典问题,例如背包问题和最短路径规划。动态规划的基本思想是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到目标问题的解。动态规划会保存已解决的子问题的答案,在求解目标问题的过程中,需要这些子问题答案时就可以直接利用,避免重复计算。本章介绍如何用动态规划的思想来求解在马尔可夫决策过程中的最优策略。
281 0
动手学强化学习(三):动态规划算法 (Dynamic Programming)
|
存储 移动开发 算法
AcWing数据结构 - 数据结构在算法比赛中的应用(上)
AcWing数据结构 - 数据结构在算法比赛中的应用(上)
103 0

热门文章

最新文章