本來說今天要寫寫狀壓dp的,結果大致看了幾道題,發現剩下的都不會,然後突發奇想去看了看去年的csp-s的題,由於那會兒我只學了不到三個月吧,所以啥都不會藉口,就打了40多分,慘。今天重新做了一下,d1t1,這麼簡單的題為什麼我當時不會!其實就是乙個分治,寫了不到十分鐘就a了。主要是想說一下t2,t3仍然不會逃,t2應該算是乙個很經典的問題了,括號配對,只不過這個題是挪到了樹上,用乙個有輔助的樹形dp就能解決,這個括號類的問題值得總結一下。
括號配對
感覺最基礎的配對只要好好學過奧賽應該都會,這道題算是難一點的了。
括號配對時用要用到乙個棧,為什麼是棧呢?因為棧的特點是後進先出,如果遇到乙個括號,那麼它肯定和之前遇到的最近的同型別括號匹配,所以用個棧,這道題的難點是它要考慮括號的大小問題,為了解決這個問題,可以根據題意確定一下每個括號的優先順序,然後先比較優先順序,再進行配對。
左括號與右括號的優先順序順序應該是正好相反的,注意一下就行。
還有建議寫乙個函式來判斷能否配對,這樣比較方便return。
#include#includeusing namespace std;
const int n=300;
char stk[n],str[n];
int top;
int ch(char x)')return 5;
if(x==']')return 6;
if(x==')')return 7;
if(x=='>')return 8;
}void judge()
}else
top--;}}
if(top)printf("no\n");
else printf("yes\n");
}int main()
}
然後其實d1t2的括號樹就是由最基本的原型拓展來的。
先考慮鏈的情況,因為鏈最基本並且也有一部分部分分。如果設\(f_u\)表示從根節點到\(u\)的合法括號序列總數,\(p_u\)表示\(u\)的父親,那麼顯然有轉移方程\(f_u=f_+以u為右端點的合法括號序列數\),\(f_\)在dfs的時候就可以求出來,關鍵是後邊那個怎麼求,我們可以利用拆分的思想,把一條鏈拆成兩部分,開乙個棧存可以被用來配對的左括號的節點編號,假設在\(v\)遇到乙個右括號,如果棧為空,不需要任何操作,因為什麼配對都做不了,如果棧不空呢?
如果它不空的話,取出棧頂元素\(u\),以u為右端點的合法括號序列數就是以\(p_u\)為右端點的合法括號序列數+1,加的一就是括號序列\(uv\),那麼之前的還用考慮嗎?不用,因為它已經被包含在這種情況裡邊了。
鏈的問題解決了,樹上邊就只需要乙個回溯,因為每層dfs最多隻會改變乙個元素,所以最後再還原一下現場就行。
}從這個**開始圖論我要換碼風了,head用h代替,len用idx,別問為什麼,問就是跟別的dalao學的。
JQuery問題總結 持續更新
這些對剛開始做小專案不熟悉的人員有一定的幫助!忘記或者經常用到的方法函式 addclass hot removeclass,hasclass,keyup change blue attr each keyup事件是鍵盤上的某個鍵按下後再鬆開時觸發 change事件是控制項的內容發生改變時觸發 blu...
MySQL問題總結(持續更新)
1.新增新使用者 準備建立乙個新使用者的時候報錯了 create user username identified by password the mysql server is running with the skip grant tables option so it cannot execu...
總結持續更新
1 從屬關係的區別 link屬於xhtml標籤,而 import是css提供的語法規則,link除了載入css,還可以定義rss,定義rel連線屬性等,import就只能載入css。2 載入順序的區別 頁面載入時,link會同時被載入,而 import引用的css會等頁面被載入完後再載入。3 相容性...