3 条题解
-
6
对楼上那为大佬的补充
首先前面讲解的都很清楚了,
当前集合排序后<=原数组前len个排序后对于一次交换 ,如果交换的位置都在前缀 内,那么前缀里的数字集合不变;如果一个位置在前缀内,一个在后缀,那么前缀中会进入一个更小的数字。因此可以发现:无论进行多少次操作,任意前缀排序后的结果都不会比原排列对应前缀排序后的结果更大。
所以一个排列 可以被生成,当且仅当对于所有 ,满足:
$$sort(b_1,b_2,\dots,b_i)\le sort(a_1,a_2,\dots,a_i)$$其中比较是逐位比较。
因为 ,考虑状压 DP。我们不枚举最终排列,而枚举当前前缀选择了原排列中的哪些位置。设 表示:集合 中的位置对应的数字,可以组成一个合法前缀。若 ,说明当前已经确定了前 个位置。
转移时枚举一个没有加入的位置 ,令:
如果集合 满足前缀限制,则:
判断一个集合是否合法,只需要将集合中的数字排序,与原数组前 个数字排序后比较即可。
最终所有位置都被选择:
答案就是:
信息
- ID
- 2803
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 7
- 标签
- (无)
- 递交数
- 18
- 已通过
- 9
- 上传者