洛谷P2513 逆序對數列 線性dp

2021-09-27 08:06:00 字數 953 閱讀 5131

給出n≤1

e3

n\leq1e3

n≤1e

3,求長度為n

nn的全排列當中逆序對為k

kk的個數有多少個。

又是乙個不太熟悉的套路。由於是全排列,所有的元素都是互異的。而且逆序對只用考慮相對的位置,也就是這裡的具體的值其實不重要。

用f i,

jf_

fi,j

​表示前i

ii個元素有j

jj個逆序對的方案數。當前的這一位放進來,可以產生0

00到i−1

i-1i−

1個逆序對。fi,

j=∑k

=i−(

j−1)

jfi−

1,

kf_=\sum\limits_^f_

fi,j​=

k=i−

(j−1

)∑j​

fi−1

,k​。這個複雜度是o(n

k2

)o(nk^2)

o(nk2)

的,字首和優化一下可以做到o(n

k)

o(nk)

o(nk)。

#includeusing namespace std;

typedef long long ll;

const int inf=0x3f3f3f3f;

const int n=1e3+7;

const int mod=1e4;

int f[n][n];

int main()

f[i][j]+=sum;

f[i][j]%=mod;

// for(int k=max(0,j-i+1);k<=j;k++)

} }printf("%d\n",f[n][k]);

return 0;

}

洛谷 P2513 HAOI2009 逆序對數列

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

P2513 HAOI2009 逆序對數列

題目描述 對於乙個數列,如果有iaj,那麼我們稱ai與aj為一對逆序對數。若對於任意乙個由1 n自然數組成的數列,可以很容易求出有多少個逆序對數。那麼逆序對數為k的這樣自然數數列到底有多少個?錯誤日誌 沒想対,菜是原罪,最近狀態不佳 在一段 1 i 1 的排列中加入 i 你可以控制 i 插入的位置,...

P2513 HAOI2009 逆序對數列

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