poj 2085 Inversion 求逆序列
http://acm.pku.edu.cn/JudgeOnline/problem?id=2085
給定整數N,和一個序列的逆序數M,求以1,2...N為元素,逆序為M,且按字典序最小的那個序列。
只要知道這樣一個事實:一個序列的逆序唯一決定了這個序列。
例如:序列1,4,3,2的逆序為1--0,2--2,3--1,4--0,可以用一個四維坐標來表示(0,2,1,0),第i維的數是 i 在原序列中的逆序數,取值范圍是0,1...4-i。
為解決這個問題,以N=4,逆序數M=5為例。
1 | 2 | 3 | 4 | |
最大逆序 | 3 | 2 | 1 | 0 |
對這個問題可以采取貪心策略。
首先,如果所求序列以1為首,則1的逆序為0,可以從上表看出此時序列的逆序數最多為2+1=3<5,不滿足。考慮以2為首,序列的逆序最多為3+1<5,不滿足。
考慮以3為首,可見當1的逆序為3,2的逆序為2,4的逆序為0時滿足要求,這時1,2,4均為最大逆序,因而只能排列為4,2,1,加上首數,所求序列為3,4,2,1。
若M=3,采取同樣的貪心策略,可求得結果為1,4,3,2。
依此思路,可以得到所求序列關于N,M的關系式,具體如下:
1,2,3,...N-P, N-((p-1)*p/2-M), N , N-1...N-P+1.(P是滿足(P-1)*P/2>=M的最小值)。
代碼就容易多了。
關于更多排列的內容可參考:/Files/sdz/s.doc




























