My Solution
dfs+优先队列+贪心
向把数读入到priority_queue, 同时用 map<int, bool> mp来标记这些数字,出现过。
然后每次贪心的取最大的值,u = pq.top(), mp[u] = false; 然后dfs的向下推可行的一步,比如 13 到 6 如果可以就标记并返回,否者继续向下找。
如果最大值已经不能向下推了,则pq里维护着的元素就是答案了。
此外,这个方法对于 n == 1时要特殊处理, 不然n == 1的时候 一直mp[1] = false,然后dfs(1),这样每次flag都被标记跳不出循环了
总复杂度 O(nlognlogn)
#include
#include
#include
非特殊说明,本博所有文章均为博主原创,未经许可不得转载。
https://www.prolightsfxjh.com/
Thank you!
------from ProLightsfx
共有 0 条评论