portal
這題區間dp還是很明顯的,考慮對於乙個括號序列,要麼把它拆成很多個括號序列,要麼去掉兩端的括號,合併的時候記錄下兩端的顏色即可。轉移明顯。
#include#include#include#includeusing namespace std;
const int n=710;
long long f[n][n][3][3];
const long long mod=1e9+7;
char s[n];
int sta[n],top,last[n],n;
int fx[4]=;
int fy[4]=;
void get_ans(int l,int r)
if(last[r]==l)
return ;
} int now=r;
while(now>=l)
now=last[r]-1;
while(now>=l)
for(int i=0;i<=2;i++)
for(int j=0;j<=2;j++)
f[last[now]][r][i][j]%=mod;
now=last[now]-1; }}
int main()
get_ans(1,n);
long long ans=0;
for(int i=0;i<=2;i++)
for(int j=0;j<=2;j++)
ans+=f[1][n][i][j];
printf("%lld\n",ans%mod);
}
51nod 1791 合法括號字段
原題連線 51nod 1791 合法括號字段 1791 合法括號子段 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 有乙個括號序列,現在要計算一下它有多少非空子段是合法括號序列。合法括號序列的定義是 1.空序列是合法括號序列。2.如果s是合法括號序列,那麼 s ...
動態規劃 51nod1371
這一題考察的是完全狀態的獲取能力 好題,回頭一定要再複習一遍.主要是複習思想.dp狀態的獲得是由小狀態通過找出後效型的問題關鍵然後再一步一步增加限制的.所以一開始的dp i 很重要.往往先不出來的時候可以開綠一下是不是dp i 的狀態是否正確.注意細節 c n 2 include include i...
51nod 1791 合法括號子段
題解 我們可以發現每一對可以匹配的左右括號一定是一一對應的,那麼我們用乙個棧維護即可。如果當前是右括號,棧頂是左括號,那麼一定有1的貢獻,還要加上之前到達過top 1這個位置多少次,因為現在這一對括號可以和之前的那些組成更長的序列。1 include2 include3 include4 defin...