B 公升降序列

2022-07-23 23:12:23 字數 1184 閱讀 9049

目錄【題目描述】

對於乙個排列,考慮相鄰的兩個元素,如果後面乙個比前面乙個大,表示這個位置是上公升的,用 i 表示,反之這個位置是下降的,用 d 表示。如排列 3,1,2,7,4,6,5 可以表示為 diidid。

現在給出乙個長度為 n-1 的排列表示,問有多少種 1 到 n 的排列滿足這種表示。

【輸入輸出格式】

輸入格式:

乙個字串 s,s 由 i,d,?組成。?表示這個位置既可以為 i,又可以為 d。

輸出格式:

有多少種排列滿足上述字串。輸出排列數模 1000000007。

【輸入輸出樣例】

輸入樣例#1:

?d輸出樣例#1:

3【說明】

對於 20%的資料,s 長度 ≤ 10;

對於 100%的資料,s 長度 ≤ 1000。

dp。用\(dp[i][j]\)表示i這麼長的序列,最後乙個是j的符合要求的序列個數

於是有方程:

\[dp_= \begin \sum_^ dp_ \ \ \text \\[1ex] \\ \sum_^ dp_\ \ \text\end

\]為了簡化計算,計算\(dp_\)之前,把\(dp_\)處理成字首和的形式。

#include#include#include#include#include#define mod 1000000007

#define ll long long

#define file freopen("b.in","r",stdin);freopen("b.out","w",stdout)

using namespace std;

const int maxn=1000+5;

ll n=1,dp[maxn][maxn],ans;

char c;

int main()

if(c=='i')

if(c=='d')

}if(c=='?')

for(ll i=1; i

}c=getchar();

}ans=0;

for(ll i=1; i<=n; ++i)

cout<

return 0;

}

FZU 1891 公升降序列

description 公升降序列的定義如下 給定n個不同的整數a1,a2,an組成的集合,其中n為奇數,在這n個整數集合的乙個排列中,如果對於所有1i 1 ai ai 1,那麼稱該序列為公升降序列。給定n個不同的整數組成的集合,請你構造出乙個公升降序列,使得該公升降序列的字典序最小。對於有n個元素...

1020 電梯公升降

時間限制 1 秒 記憶體限制 32 兆 特殊判題 否 提交 61 解決 32 某城市最高的建築只有一部電梯。乙份電梯公升降任務表由n個正整數組成,這些數字表示電梯按照給定的順序停留的樓層號。電梯公升一層花費6秒鐘,降一層花費4秒鐘,並且每次停留花費5秒鐘。對於每乙份任務表,你要計算出完成全部公升降任...

1020 電梯公升降

1020 電梯公升降 分數 1 時間限制 1 秒記憶體限制 32 兆特殊判題 否 提交 0解決 0 題目描述 某城市最高的建築只有一部電梯。乙份電梯公升降任務表由n個正整數組成,這些數字表示電梯按照給定的順序停留的樓層號。電梯公升一層花費6秒鐘,降一層花費4秒鐘,並且每次停留花費5秒鐘。對於每乙份任...