【SDOI2015】bzoj3990 排序
2020-12-13 06:06
标签:etc oid char img ott label 条件 ges lld 一行,一个整数,表示可以将数组A从小到大排序的不同的操作序列的个数。 对于30%的数据,1
一个伪装成计数题的大搜索… 首先要知道一个结论:对于一个操作序列,如果他是合法的,那么他的全排列都是合法的,所以从小到大搜索,同时记录操作数k。 对于第x次操作,把序列分成2x-1段,暴力搜索有几段不满足a[i]=a[i-1]+1(注意这里并不只是要求满足递增),如果大于两段,显然无解; 如果没有,则第x操作无需进行(即对答案无贡献),直接向下递归即可,因为如果此时进行第x次操作,会将顺序打乱,之后的操作并不能使之还原。 如果有1段,则将这一段从中间断开,暴力交换,如果仍不满足则无解,满足则继续向下递归,k++; 如果有2端,则有四种情况,暴力交换向下递归即可,注意回溯时要还原。 结束条件:a[i]=i,答案为k!(即A(k,k)); 不过这题看起来复杂度好高啊,居然能跑的这么快… 【SDOI2015】bzoj3990 排序 标签:etc oid char img ott label 条件 ges lld 原文地址:https://www.cnblogs.com/Al-Ca/p/11166533.htmlA. 排序
输入格式
输出格式
样例
样例输入
3
7 8 5 6 1 2 4 3
样例输出
6
数据范围与提示
#include