lougu2513 HAOI2009 逆序對數列

2022-09-08 00:06:26 字數 1186 閱讀 2659

題目描述

對於乙個數列,如果有i小於j且ai大於aj,那麼我們稱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=4,k=3

1後面加(2,3,4),k=3的方案數

(1和後面的數不能組成逆序對,這就要求(2,3,4)之間組成3對逆序對)

2後面加(1,3,4),k=2的方案數

(2和後面的數能組成1對逆序對,這就要求(1,3,4)之間組成2對逆序對)

3後面加(1,2,4),k=1的方案數

(3和後面的數能組成2對逆序對,這就要求(1,2,4)之間組成1對逆序對)

4後面加(1,2,3),k=0的方案數

(4和後面的數能組成3對逆序對,這就要求(1,2,3)之間組成0對逆序對)

i=5 k=3

1 (2,3,4,5) k=3;

2 (1,3,4,5) k=2;

3 (1,2,4,5) k=1;

4 (1,2,3,5) k=0; 、

這裡寫**片

#include

#include

#include

using

namespace

std;

const

int mod=10000;

int f[1010][1010];

int n,m;

int main()

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

return

0;}

P2513 HAOI2009 逆序對數列

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

P2513 HAOI2009 逆序對數列

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

P2513 HAOI2009 逆序對數列

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