出入棧 九度1547 卡特蘭數 快速冪取餘

2021-06-23 03:56:59 字數 970 閱讀 7649

慢慢也發現自己的確跟不上節奏了。明明acm該是個狠好的選擇。可是時間至此時此刻,不能說沒有機會 只能說甚微了。為了自己的保研大業,在各種oj上亂刷幾題,也算是對自己的安慰。

題目

題意:給乙個空棧和n步操作,保證每一步操作合法並且最終結果保證粘依舊為空。

思路:奇數次操作一定輸出0,然後dfs輸出偶數次操作前幾項n1

2345

6a24

681012

c(n)12

51442132

發現是個卡特蘭數。

卡特蘭數遞推公式:h(0)=h(1)=1 , h(n) = [(4*n-2)/n+1]*h(n-1) (n≥2)

同餘定理:(a*b)%p=(a%p * b%p)%p   (a/b)%p=(a%p * 1/b %p)%p

費馬小定理:a^(p-1) % p = 1 (p是質數)

根據費馬小定理得:1/a %p = a^(p-2) % p  其中 a^(p-2) %p 利用快速冪取餘的辦法求得。

快速冪取餘(a^b %p):把b拆分成2進製表示從右向左一位一位計算。當第n項為1時令前n項的結果乘以a^(2^(n-1)),並注意實時取餘。

#include #include #include #include using namespace std;

#define mod 1000000007

typedef long long ll;

ll h[505];

ll exp_mod(ll a)

return res;

}void init()

int main()

return 0;

}

卡特蘭數例題 出入棧

題目描述 給定乙個初始為空的棧,和n個操作組成的操作序列,每個操作只可能是出棧或者入棧。要求在操作序列的執行過程中不會出現非法的操作,即不會在空棧時執行出棧操作,同時保證當操作序列完成後,棧恰好為乙個空棧。求符合條件的操作序列種類。例如,4個操作組成的操作序列符合條件的如下 入棧,出棧,入棧,出棧 ...

九度OJ 1547 出入棧 動態規劃

題目描述 給定乙個初始為空的棧,和n個操作組成的操作序列,每個操作只可能是出棧或者入棧。要求在操作序列的執行過程中不會出現非法的操作,即不會在空棧時執行出棧操作,同時保證當操作序列完成後,棧恰好為乙個空棧。求符合條件的操作序列種類。例如,4個操作組成的操作序列符合條件的如下 入棧,出棧,入棧,出棧 ...

九度 1547 出入棧 二維DP

題目描述 思路 1.dp i j 表示前 i 個操作中有 j 個入棧操作的方案數 2.dp i j dp i 1 j 1 dp i 1 j 其中 j i 2.3.為了方便起見,非法的狀態為 0,比如 dp 3 1 0 source.cpp created on 2014 4 4 author vin...