Codevs 4357 不等數列

2022-04-02 07:01:14 字數 1301 閱讀 9355

不等數列

【題目描述】

將1到n任意排列,然後在排列的每兩個數之間根據他們的大小關係插入「>」和「

【輸入格式】

第一行2個整數n,k。

【輸出格式】

乙個整數表示答案。

【樣例輸入】

5 2【樣例輸出】

【資料範圍】

對於30%的資料:n <= 10

對於100%的資料:k < n <= 1000, 

對於30% n<=10的資料,搜尋打表,狀態壓縮動態規劃......

對於1--n等類似的排列計數問題,以動態規劃

組合數學

2種大方向為基本解決方向。

組合數學在noip最難也就到楊輝三角左右,所以這題我從動態規劃展開。

如果此類排列問題在腦中的模型是:「有n個格仔,填入1--n」,那麼相對應的dp就不得不記錄哪些數填過了(從左到右填入)或者哪些格仔填過了(從小到大填入)。這樣一來就必須要使用狀態壓縮來儲存這些資訊,就使得複雜度變得難以接受。

而如果換個模型:「從小到大把數字插入數列

」。注意是數列而不是格仔,這樣一來就不需要記錄是哪些數字插入了(而只要記錄插入到了第幾個數字),同時不需要記錄每個數字的具體位置,也不需要記錄數字的相對位置,而只需記錄相對關係的數目

(對本題而言就是有幾個「

因為是從小到大插入數字,所以當前插入的數字一定大於所有已經插入的。

藍色是當前插入的數字,如果它插入到

《關係的2個數字之間(或者數列最左端),就會使數列的《數量不變,>數量+1:

類似的,插入關係的2個數字之間(或者數列最右端),數列的《數量+1,>數量不變。

f[i][j]表示前i個數字構成的數列中,恰有j個『』號就有i-j-1個)。

f[i][j]=f[i-1][j-1]*(i-j)+f[i-1][j]*(j+1).

時空複雜度:o(n^2)

若打表則時間複雜度為o(1)

#include#include

using

namespace

std;

int n,k,f[1010][1010

];int

main()

不等式數列

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

不等式數列 DP

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

演算法題 不等式數列

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