不等式數列

2021-08-10 10:24:09 字數 1381 閱讀 7024

不等式數列

時間限制:1秒

空間限制:

32768k

度度熊最近對全排列特別感興趣,對於

1到n的乙個排列

,度度熊發現可以在中間根據大小關係插入合適的大於和小於符號(即

'>'

和'<' )

使其成為乙個合法的不等式數列。但是現在度度熊手中只有

k個小於符號即

('<'')

和n-k-1

個大於符號(即

'>'),

度度熊想知道對於1至

n任意的排列中有多少個排列可以使用這些符號使其為合法的不等式數列。

輸入描述:

輸入包括一行

,包含兩個整數n和

k(k < n ≤ 1000)

輸出描述:

輸出滿足條件的排列數

,答案對

2017

取模。

輸入例子1:

5 2

輸出例子1:

66

分析:1.dp[i][j]表示有i個數字,j個「<」(則「>」的數量為i-j-1)

2.當加入第i+1個數字時,分為4種情況:

1)如果將第i+1個數插入當前序列的開頭,如有了1<2,加入後為3>1<2,等於同時加入了1個「>」(此時可無視1與2之間的關係,因為i+1>i)

2)如果將第i+1個數插入當前序列的末尾,如有了1<2,加入後為1<2<3,等於同時加入了1個「<」(此時可無視1與2之間的關係,因為i+1>i)

3)如果將第i+1個數插入乙個「<」之間,如有了1<2,加入後為1<3>2,等於同時加入了乙個「>」

4)如果將第i+1個數插入乙個「>」之間,如有了2>1,加入後為2<3>1,等於同時加入了乙個「<」

3.綜上所述,dp[i][j]等於

dp[i-1][j]    將i加在開頭,等於加入1個「>」

dp[i-1][j]*j   將i加入任意乙個「<」之間,等於加入1個「>」,共有j個「<」

dp[i-1][j-1]   將i加在末尾,等於加入1個「<」

dp[i-1][j-1]*(i-j-1)將i加在任意乙個「>」之間,等於加入1個「<」,共有(i-1)-(j-1)-1=i-j-1個「>」

4.合併後

dp[i][j]=(dp[i-1][j-1]*(i-j)+dp[i-1][j]*(j+1))

最後取模

#include#includeint dp[1001][1000];

int main()

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

}return 0;

}

不等式數列 DP

度度熊最近對全排列特別感興趣,對於1到n的乙個排列,度度熊發現可以在中間根據大小關係插入合適的大於和小於符號 即 和 使其成為乙個合法的不等式數列。但是現在度度熊手中只有k個小於符號即 和n k 1個大於符號 即 度度熊想知道對於1至n任意的排列中有多少個排列可以使用這些符號使其為合法的不等式數列。...

演算法題 不等式數列

度度熊最近對全排列特別感興趣,對於1到n的乙個排列,度度熊發現可以在中間根據大小關係插入合適的大於和小於符號 即 和 使其成為乙個合法的不等式數列。但是現在度度熊手中只有k個小於符號即 和n k 1個大於符號 即 度度熊想知道對於1至n任意的排列中有多少個排列可以使用這些符號使其為合法的不等式數列。...

不等號屬於不等式嗎 實數(等式和不等式)

在高中數學的第二章,a版教材稱其為一元二次函式 方程和不等式,而b版教材僅稱其為等式和不等式,這不是說a版教材的內容豐富,反而是說b版教材更突出數學的一般性。不論你學哪一版本,都應該把這一章的內容在本質上看作是實數,等式 不等式的性質,乃至一元二次方程和不等式,都是實數性質的體現。在現代數學,我們有...