BZOJ 2431 逆序對數列 DP

2021-07-13 08:12:17 字數 1142 閱讀 4728

2431: [haoi2009]逆序對數列

time limit: 5 sec memory limit: 128 mb

description

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

input

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

output

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

sample input

樣例輸入

4 1sample output

樣例輸出

樣例說明:

下列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表示前i個數,j表示有j個逆序對 從小往大插,當從i-1個數的排列中插入第i個數的時候,逆序對的個數增加值等於插入位置後面小於i的數的個數,即為插入位置後面的數字的個數,也就是【0~i-1】。

轉移方程:f[i][j]=∑f[i-1][j-k]

字首和可以優化到o(n^2)

優化之前的(這題不報tle,只報wa,,,,,,,,,,,,)

// by sirius_ren

#include

using

namespace

std;

int n,m,f[1002][1002],sum[1002];

int main()

加了個字首和之後的。。

// by sirius_ren

#include

using

namespace

std;

int n,m,f[1002][1002],sum[1002];

int main()

printf("%d",f[n][m]);

}

BZOJ 2431 逆序對數列

time limit 5 sec memory limit 128 mb submit 2611 solved 1526 submit status discuss description 對於乙個數列,如果有i aj,那麼我們稱ai與aj為一對逆序對數。若對於任意乙個由1 n自然數組成的 數列,可...

BZOJ2431 逆序對數列 KEY

題目傳送門 不知道今天是怎麼了,可能是空調吹多了吧,一直不在狀態,連遞推題我都做不來了 扎zn了老fe 然而,不管環境如何惡劣,我們仍要努力學習,為了自己的明天而奮鬥。說的好像跟真的一樣 其實這題就是乙個遞推,現在我們考慮第i個數,定義f i j 表示序列裡有i個數,逆序對的組數為j的方案數。因為第...

BZOJ2431 逆序對數列(動態規劃)

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