題目描述
計算乙個合法括號字串的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 提出的計算任務。輸入...