P序列問題

2021-07-06 04:20:41 字數 1610 閱讀 5601

題目描述

計算乙個合法括號字串的p序列。括號字串的p序列是由每個右括號與其對應左括號之間的右括號個數排列而成的。 例如,括號字串「((()(())))」的p序列為:「1 1 2 4 5」

輸入 一組合法的括號字串,每個括號字串一行。

輸出 每個括號字串的p序列輸出一行,每個數值後有乙個空格。

其實想想很簡單,有兩種方法。第一種,讀入乙個左括號,將數1入棧,當讀到右括號時,棧頂元素出棧輸出,棧內所有元素數值加一。**如下:

#include

#include

#define ok 1

#define true 1

#define false 0

#define stacksize 100

#define emptytos -1

typedef int elemtype;

typedef struct stack

stackptr;

void creatstack(stackptr &s)

int stackempty(stackptr &s)

int stackfull(stackptr &s)

int push(stackptr &s, int item)

return false;

}int pop(stackptr &s)

return false;

}int add(stackptr &s)

int main()

}printf("\n");

}return

0;}

第二種方法,將所有括號從左到右按1到n順序賦值,讀到左括號,將數值壓棧,讀到右括號,將棧頂元素彈出與陣列內元素比較大小,輸出比它大的數的個數加一輸出,並將棧頂元素的數值記錄存入陣列。(這個要複雜些,不過比較容易想到)**如下:

#include

#include

#define ok 1

#define true 1

#define false 0

#define stacksize 100

#define emptytos -1

typedef int elemtype;

typedef struct stack

stackptr;

void creatstack(stackptr &s)

int stackempty(stackptr &s)

int stackfull(stackptr &s)

int push(stackptr &s, int item)

return false;

}int pop(stackptr &s)

return false;

}int j = -1;

int find(stackptr &s, int *t)

t[j] = item;

return temp;

}int main()

; for(int i = 0; str[i] != '\0'; i++)

printf("\n");

}return

0;}

洛谷P6477 子串行問題

題目描述 給定乙個長度為 n 的正整數序列 a 1 a 2 cdots a n 定義乙個函式 f l,r 表示 序列中下標在 l,r 範圍內的子區間中,不同的整數個數。換句話說,f l,r 就是集合 cdots,a r 的大小,這裡的集合是不可重集,即集合中的元素互不相等。現在,請你求出 sum n...

P2766 最長不下降子串行問題

話不多說,直接上思路。其實這就是一道dp動態規劃的經典問題,首先鏈上題目描述 問題描述 設有整數序列b1,b2,b3,bm,若存在 i1 i2 i3 in,且 bi1 bi2 bi3 bin,則稱b1,b2,b3,bm中有長度為n的不下降序列bi1,bi2,bi3,bin。求序列中最大不下降子串行長...

P2766 最長不下降子串行問題

問題描述 給定正整數序列x1,xn 1 計算其最長不下降子串行的長度s。2 計算從給定的序列中最多可取出多少個長度為s的不下降子串行。3 如果允許在取出的序列中多次使用x1和xn,則從給定序列中最多可取出多少個長度為s的不下降子串行。程式設計任務 設計有效演算法完成 1 2 3 提出的計算任務。輸入...