【題目描述】
對於乙個數列,如果有ia[j],那麼我們稱a[i]與a[j]為一對逆序對數。若對於任意乙個由1~n自然數組成的數列,可以很容易求出有多少個逆序對數。詢問逆序對數為k的這樣自然數數列到底有多少個。
【輸入描述】
第一行為兩個整數n、k。
【輸出描述】
寫入乙個整數,表示符合條件的數列個數,由於這個數可能很大,你只需輸出該數對10000求餘數後的結果。
【輸入樣例】
4 1【輸出樣例】
3【資料範圍】
下列3個數列逆序對數都為1,分別是:
1 2 4 3
1 3 2 4
2 1 3 4
n <= 1000,k <= 1000。
bzoj的資料太水了,o(m*n^2)的普通解法竟然過了:
源**:#include
int m,n,f[1001][1001]=;
intmain()
/*挺簡單的dp:
f[i][j]表示1~i個自然數所組合成的、逆序對數為j的數列個數。
在1~i中,i即為最大,故將它安插到某一位置,其後方的所有數都會與它形成逆序對。
由上可得狀態轉移方程:
f[i][j] = ∑f[i-1][j-i+k],(1 <= k <= i)。
*/
滾動陣列+字首和優化後的o(mn)解法:
源**:#include
int m,n,sum[1001],f[1001
];int
main()
else
f[b]=sum[b];
for (int b=1;b<=m;b++) //
字首和處理。
sum[b]=(sum[b-1]+f[b])%10000
; }
printf("%d
",f[m]);
return0;
}
BZOJ 2431 逆序對數列
time limit 5 sec memory limit 128 mb submit 2611 solved 1526 submit status discuss description 對於乙個數列,如果有i aj,那麼我們稱ai與aj為一對逆序對數。若對於任意乙個由1 n自然數組成的 數列,可...
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...