日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

P1044 栈

發布時間:2025/5/22 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 P1044 栈 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

P1044 棧

題目背景

棧是計算機中經典的數據結構,簡單的說,棧就是限制在一端進行插入刪除操作的線性表。

棧有兩種最重要的操作,即pop(從棧頂彈出一個元素)和push(將一個元素進棧)。

棧的重要性不言自明,任何一門數據結構的課程都會介紹棧。寧寧同學在復習棧的基本概念時,想到了一個書上沒有講過的問題,而他自己無法給出答案,所以需要你的幫忙。

題目描述

寧寧考慮的是這樣一個問題:一個操作數序列,從1,2,一直到n(圖示為1到3的情況),棧A的深度大于n。

現在可以進行兩種操作,

1.將一個數,從操作數序列的頭端移到棧的頭端(對應數據結構棧的push操作)

  • 將一個數,從棧的頭端移到輸出序列的尾端(對應數據結構棧的pop操作)
  • 使用這兩種操作,由一個操作數序列就可以得到一系列的輸出序列,下圖所示為由1 2 3生成序列2 3 1的過程。

    (原始狀態如上圖所示)

    你的程序將對給定的n,計算并輸出由操作數序列1,2,…,n經過操作可能得到的輸出序列的總數。

    輸入輸出格式

    輸入格式:

    ?

    輸入文件只含一個整數n(1≤n≤18)

    ?

    輸出格式:

    ?

    輸出文件只有一行,即可能輸出序列的總數目

    ?

    輸入輸出樣例

    輸入樣例#1:
    3 輸出樣例#1:
    5

    思路:

    這個題的原理是一個卡特蘭數。

    不懂卡特蘭數的自己百度。

    這里給個傳送門:

    https://baike.baidu.com/item/%E5%8D%A1%E7%89%B9%E5%85%B0%E6%95%B0?fr=aladdin

    不過這個題目有兩種變形:

    1、給出一個序列,判斷是否是出棧序列

    2、打印出所有的出棧序列

    1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<cstring> 5 #include<algorithm> 6 using namespace std; 7 const int mxn=10000; 8 int n; 9 int f[mxn]; 10 int main(){ 11 int i,j; 12 f[0]=1; 13 f[1]=1; 14 scanf("%d",&n); 15 for(i=2;i<=n;i++){ 16 for(j=0;j<i;j++){ 17 f[i]+=f[j]*f[i-j-1]; 18 } 19 } 20 printf("%d",f[n]); 21 return 0; 22 }

    ?

    轉載于:https://www.cnblogs.com/Renyi-Fan/p/7421139.html

    總結

    以上是生活随笔為你收集整理的P1044 栈的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。