給出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。輸出格式 寫入乙個整數,表示符合條件的數列個數,由於這個數可能很大,你只需輸出該數對...