題意:給你一個整數 \(n\) ,構造并列印長度為 \(2n\) 的 \(n\) 個不同的合法括号序列。
題目分析:模拟,不妨設最初的括号序列為 \(\underbrace{(((}_{n} \cdots \underbrace{)))}_{n}\) ,每次從中取出一對合法括号放外邊即可。
AC代碼:
題意:給你四個整數值 \(a\) 、 \(b\) 、 \(c\) 和 \(m\) 。
判斷是否存在包含以下内容的字元串:
\(a\) 個字母 \(A\)
\(b\) 個字母 \(B\)
\(c\) 個字母 \(C\)
正好含有 \(m\) 對相鄰的相等字母(即 \(s[i] = s[i+1]\) )。
題目分析:不妨假設 \(a \leq b \leq c\) ,先考慮相鄰相等字母的上下限:
上限:\(\underbrace{AAA}_{a} \cdots \underbrace{BBBB}_{b} \cdots \underbrace{CCCCC}_{c}\) ,即 \((a-1)+(b-1)+(c-1)\)
下限:\(\underbrace{CACA}_{a個C} \cdots \underbrace{CBCBCB}_{b個C} \cdots CCCCC\) ,即 \(c - (a+b) - 1\)
可以證明,若 \(min \leq m \leq max\) ,則這樣的序列一定存在。
\(min +1\) :\(\underbrace{ACACA \cdots CA}_{a-1個C} \underbrace{CBCBCB}_{b個C} \cdots CCCCC+C\)
\(min +2\) :\(\underbrace{CACA \cdots CAA}_{a-1個C} \underbrace{CBCBCB}_{b個C} \cdots CCCCC+C\)
在 \(min\) 的基礎上每多出一對鄰相等字母,就把字元串的頭字母放到該字母最後一次出現的位置之後。
題意:很久很久以前,巨龍突然出現
你有一支含 \(n\) 位勇者的小隊,現在有 \(m\) 條惡龍,第 \(i\) 條的防禦為 \(x_i\) ,攻擊力為 \(y_i\) 。對每條龍,你可以選出一名能力值 \(a_i \geq x_i\) 的勇者誅戮惡龍,其餘勇者留下來防守,且防守的勇者們能力值總和 \(sum \geq y_i\) 。
同時,你可以花費 \(1\) 點 \(cost\) 将任意勇者的能力值提升 \(1\) 點,此操作可以進行任意次。
問擊敗第 \(i\) 條龍的最小花費是多少(對戰每條龍時所有勇者的能力值重置)。
題目分析:采取貪心政策,找到序列中首次出現的 \(\geq\) 和 \(\leq x_i\) 的值 \(a_i\) ,然後計算相應花費輸出較小的即可。
題意:給你 \(n\) 個裝備槽,每個裝備槽有 \(c\) 件裝備可以挑選,每件裝備的屬性值為 \(a_{i,j}\) ,現有 \(m\) 種不合法的方案數,求在此條件下使得屬性值最大的組合方案。
題目分析:一開始用 \(dfs\) 暴搜結果 \(MLE\) 了。這裡給出一種貪心的政策,優先用更好的裝備,第 \(i\) 個裝備槽隻考慮能使方案合法的最好的第 \(j\) 個裝備,每次從優先隊列中取出目前最優方案,如果這個方案已經被 \(ban\) 了,就将其分成 \(n\) 個後繼方案(一個方案的後繼就是對于目前組合裡的某個槽,用剛好差一檔的裝備換上去),但分出的後繼方案可能會有重複的,是以我們選擇用 \(set\) 去重。由于優先隊列采取的是大根堆,是以這樣的做法一定能得到最優解。