關於全排列問題的總結(康托展開)

2021-06-25 15:51:34 字數 368 閱讀 8346

今天做usaco上一道題的時候用到了這個東西,當時覺得麻煩直接用map寫了,然後仔細研究了一下,康托展開與其逆展開,個人覺得會在節省空間和表示狀態上有比較大的幫助。

先來正展開吧,即給定排列序列,求是第幾個排列,看序列中的第k位,假設序列長度為n,那麼,k位之後的各位數全排列有(n-k)!種,然後看k之後的序列中有幾個比k小的,

此時,把k*(n-k)!加入到計數變數即答案中即可,乙個乙個列舉k。

#include #include #include using namespace std;

char num[10];

int jie(int n)

int main()

int main()

cout<

康托展開 全排列

今天找到了一篇非常好的介紹康托展開的文章!其核心是這一張圖 letter 儲存所需字母表 void initletter 初始化字母表 int fact int n 階乘 return result void output vector v 輸出生成的結果 cout endl void divisi...

康托展開 全排列

對於n個數的全排列,共有n!中排列方式,如何求某乙個序列在整個排列中的次序 從小到大 以9的全排枚舉例 842697513是1 9全排列的第幾個?高中數學排列組合問題,只需要做到不重不漏 首先看第一位為8,那麼第一位為1 7的全排列都比它小,共有7 8!個。在第一位為8的情況下,其次看第二位為4,那...

全排列康托展開

n個元素有n 個不同的排列。將這n 個排列按字典序排列,並編號為0,1,n 1。每個排列的編號為其字典序值。例如,當n 3時,6 個不同排列的字典序值如下 0 1 2 3 4 5 123 132 213 231 312 321 任務 給定n 以及n 個元素的乙個排列,計算出這個排列的字典序值,以及按...