题意:
给出 N N N个数的排列,你有 k k k次操作的机会,每次操作可以将相邻的两个数交换位置。
问 k k k次操作以后,能够得到的字典序最大的排列是什么?
思路:
根据数据范围,排除了动态规划的方向。
通过观察样例和手算几组简单的例子,我们可以发现,排列的第一位应尽可能的大,满足以后再让排列第二位尽可能的大…以此类推可以得到最终满足条件的最优解。
故考虑贪心。
假设前 i − 1 i-1 i−1位排列已经达到最优的状态,则对于第 i i i位和当前的 k k k值,首先可以交换的数的范围是:
[ i + 1 , i + k ] [i+1,i+k] [i+1,i+k]
随后从该区间中找出值最大的数 M x Mx Mx。
考虑两种情况,如果 M x < a [ i ] Mx < a[i] Mx<a[i]的话,则说明第 i i i位的数不用通过交换已经达到了最优的状态。
否则的话,删除原来位置的Mx,将 M x Mx Mx 插入到 a [ i ] a[i] a[i]之前,同时更新 k k k。
但因为涉及数的插入和删除,对于顺序存储映像,该问题的总复杂度为不可承受的: O (