小美的一个兼职是美团的一名跑腿代购员,她有n个订单可以接,订单编号是1~n,但是因为订单的时效性,他只能选择其中m个订单接取,精明的小美当然希望自己总的获利是最大的,已知,一份订单会提供以下信息,跑腿价格v,商品重量w kg,商品每重1kg,代购费用要加2元,而一份订单可以赚到的钱是跑腿价格和重量加价之和。小美可是开兰博基尼送货的人,所以自然不会在意自己会累这种事情。请问小美应该选择哪些订单,使得自己获得的钱最多。 请你按照选择的订单编号的从小到大顺序,如果存在多种方案,输出订单编号字典序较小的方案。
输入第一行包含两个正整数n,m,表示订单的数量和小美可以接的订单数量(1<=n,m<=10000) 接下来有n行,第i行表示i-1号订单的信息。每行有两个正整数v和w,表示一个订单的跑腿价格和商品重量。(1<=v,w<=1000)
输出包含m个1~n之间的正整数,中间用空格隔开,表示选择的订单编号。
5 2 5 10 8 9 1 4 7 9 6 10
2 5
考点:排序
数据规模 n ≤ 1e4 | 限制 1 秒 / 256MB | 标准输入输出
推荐方向:排序
本题切入点
每单收益 = 跑腿价 + 2×重量,把收益算出来后排序取最大的 m 个,再按编号升序输出。
先用 O(n log n) 排序把无序变有序,后续处理往往就简单了。
思路框架(排序 通法 · 非本题专属)
实现要点:在 C++ 中用 std::sort,Python 用 sorted();注意自定义比较函数的严格弱序。
复杂度:时间 O(n log n) | 空间 O(log n) ~ O(n)
该范式的通法易错点
对照本题
样例 1
5 2 / 5 10 / 8 9 / 1 4 / 7 9 / 6 102 5解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:美团2023校招技术第3场编程题。