为了找到自己满意的工作,牛牛收集了每种工作的难度和报酬。牛牛选工作的标准是在难度不超过自身能力值的情况下,牛牛选择报酬最高的工作。在牛牛选定了自己的工作后,牛牛的小伙伴们来找牛牛帮忙选工作,牛牛依然使用自己的标准来帮助小伙伴们。牛牛的小伙伴太多了,于是他只好把这个任务交给了你。
区块链毕设网qklbishe.com为您提供问题的解答
为了找到自己满意的工作,牛牛收集了每种工作的难度和报酬。牛牛选工作的标准是在难度不超过自身能力值的情况下,牛牛选择报酬最高的工作。在牛牛选定了自己的工作后,牛牛的小伙伴们来找牛牛帮忙选工作,牛牛依然使用自己的标准来帮助小伙伴们。牛牛的小伙伴太多了,于是他只好把这个任务交给了你。
贪心
用最朴素的自然智慧可以想清楚这道题
1.相同难度的工作,只保留报酬高的;
2.难度高报酬低的工作不要。
在以上两个约束下,每个小伙伴都选择自己能力范围内报酬最高的工作
import java.io.*; import java.util.*; import java.util.Map.Entry; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String[] params = br.readLine().split(" "); int n = Integer.parseInt(params[0]); int m = Integer.parseInt(params[1]); TreeMap<Integer, Integer> map1 = new TreeMap<>(); // 难度->报酬 for(int i = 0; i < n; i++){ params = br.readLine().split(" "); int d = Integer.parseInt(params[0]), p = Integer.parseInt(params[1]); map1.put(d, Math.max(p, map1.getOrDefault(d, 0))); // 相同的难度,只保留报酬高的 } // 把难度高报酬低的工作过滤掉 TreeMap<Integer, Integer> map2 = new TreeMap<>(); Entry<Integer, Integer> preEntry = map1.firstEntry(); map2.put(preEntry.getKey(), preEntry.getValue()); for(Entry<Integer, Integer> e: map1.entrySet()){ if(e.getValue() > preEntry.getValue()){ map2.put(e.getKey(), e.getValue()); preEntry = e; } } params = br.readLine().split(" "); for(int i = 0; i < m; i++){ int Ai = Integer.parseInt(params[i]); int val = 0; if(map2.floorEntry(Ai) != null){ val = map2.floorEntry(Ai).getValue(); } System.out.println(val); } } }
编辑于 2022-03-17 21:27:13
以上就是关于问题为了找到自己满意的工作,牛牛收集了每种工作的难度和报酬。牛牛选工作的标准是在难度不超过自身能力值的情况下,牛牛选择报酬最高的工作。在牛牛选定了自己的工作后,牛牛的小伙伴们来找牛牛帮忙选工作,牛牛依然使用自己的标准来帮助小伙伴们。牛牛的小伙伴太多了,于是他只好把这个任务交给了你。的答案
欢迎关注区块链毕设网-
专业区块链毕业设计成品源码,定制。
区块链NFT链游项目方科学家脚本开发培训