HAOI2009 逆序對數列

2022-05-11 11:26:35 字數 1228 閱讀 5640

對於乙個數列,如果有iaj,那麼我們稱ai與aj為一對逆序對數。若對於任意乙個由1~n自然數組成的數列,可以很容易求出有多少個逆序對數。那麼逆序對數為k的這樣自然數數列到底有多少個?

輸入格式:

第一行為兩個整數n,k。

輸出格式:

寫入乙個整數,表示符合條件的數列個數,由於這個數可能很大,你只需輸出該數對10000求餘數後的結果。

輸入樣例#1:

4 1

輸出樣例#1:

3

樣例說明:

下列3個數列逆序對數都為1;分別是1 2 4 3 ;1 3 2 4 ;2 1 3 4;

測試資料範圍

30%的資料 n<=12

100%的資料 n<=1000,k<=1000

題解:

算是比較好想吧.

如果dp每一位,顯然不好記錄狀態,那麼就按填數的順序枚(從小到大乙個個填)

f[i][j]表示已經填了小於等於i的數,產生的逆序對數量為j的方案數

顯然現在插入的i比以前都大,那麼可以產生[0,i-1]個逆序對

於是就可以列舉產生的逆序對數量k開始推了

f[i][j]+=f[i-1][j-k]

而且j-k是連續一段的和,那麼可以用字首和o(1)算出

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7

#define rg register

8using

namespace

std;

9 typedef long

long

ll;10

const

int n=1005,mod=10000;11

intf[n][n];ll sum[n];

12void

work()

1324

for(int j=1;j<=m+1;j++)27}

28 printf("

%d\n

",f[n][m]);29}

30int

main()

31

HAOI 2009 逆序對數列

haoi 2009 逆序對數列 對於乙個數列,如果有iaj,那麼我們稱ai與aj為一對逆序對數。若對於任意乙個由1 n自然數組成的 數列,可以很容易求出有多少個逆序對數。那麼逆序對數為k的這樣自然數數列到底有多少個?第一行為兩個整數n,k。寫入乙個整數,表示符合條件的數列個數,由於這個數可能很大,你...

HAOI2009 逆序對數列

題目大意 求 1,n 的自然數的排列中逆序對數為 k 的有多少.無優化 include include const int mod 10000 int f 1005 1005 int main printf d n f n k return 0 優化 include include const in...

HAOI2009 逆序對數列

求乙個序列的逆序對數很自然的想到了樹狀陣列,方便又快捷。根據題目的意思,它所說的各種排列是將第乙個元素移至最後形成的排列,那麼我們就從這裡下手,對於第乙個元素它後面比它小的就一定都會形成逆序對,這樣對於當前的逆序對,在第乙個元素移至最後時,它的逆序對數就要減少這個元素的值,因為此題數值是連續的所以可...