亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

CodeForces - 149D Coloring Brackets 詳細題解(遞歸區間DP+dfs染色,好題)

2019-11-06 06:02:46
字體:
來源:轉載
供稿:網友

D. Coloring Bracketstime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard output

Once Petya read a PRoblem about a bracket sequence. He gave it much thought but didn't find a solution. Today you will face it.

You are given string s. It represents a correct bracket sequence. A correct bracket sequence is the sequence of opening ("(") and closing (")") brackets, such that it is possible to obtain a correct mathematical expression from it, inserting numbers and Operators between the brackets. For example, such sequences as "(())()" and "()" are correct bracket sequences and such sequences as ")()" and "(()" are not.

In a correct bracket sequence each bracket corresponds to the matching bracket (an opening bracket corresponds to the matching closing bracket and vice versa). For example, in a bracket sequence shown of the figure below, the third bracket corresponds to the matching sixth one and the fifth bracket corresponds to the fourth one.

You are allowed to color some brackets in the bracket sequence so as all three conditions are fulfilled:

Each bracket is either not colored any color, or is colored red, or is colored blue.For any pair of matching brackets exactly one of them is colored. In other Words, for any bracket the following is true: either it or the matching bracket that corresponds to it is colored.No two neighboring colored brackets have the same color.

Find the number of different ways to color the bracket sequence. The ways should meet the above-given conditions. Two ways of coloring are considered different if they differ in the color of at least one bracket. As the result can be quite large, print it modulo1000000007 (109?+?7).

Input

The first line contains the single string s (2?≤?|s|?≤?700) which represents a correct bracket sequence.

Output

Print the only number — the number of ways to color the bracket sequence that meet the above given conditions modulo 1000000007(109?+?7).

Examplesinput
(())output
12input
(()())output
40input
()output
4Note

Let's consider the first sample test. The bracket sequence from the sample can be colored, for example, as is shown on two figures below.

The two ways of coloring shown below are incorrect.

題目描述:

  給一個合法的括號串,然后問這串括號有多少種涂色方案,當然啦!涂色是有限制的。

  1,每個括號只有三種選擇:涂紅色,涂藍色,不涂色。

  2,每對括號有且僅有其中一個被涂色。

  3,相鄰的括號不能涂相同的顏色,但是相鄰的括號可以同時不涂色。

解題思路:

給出的括號序列,括號的匹配都是固定的,也就是說只需要給這些固定匹配的括號按照上面限制涂色就好啦。

  可以定義 dp[l][r][x][y] 表示區間 [l, r] 在左端點涂x色,右端點涂y色的情況下的方案數。其中0代表不涂色, 1代表涂紅色, 2代表涂藍色。

  窩們可以把括號序列可以分為兩類分別進行狀態轉移:

  括號套括號,狀態轉移是:dp[l][r][x][y] += dp[l+1][r-1][x'][y'] (0<=x'<3, x'!=x, 0<=y'<3, y!=y')

  多個匹配串連起來,轉臺轉移是:dp[l][r][x][y] += dp[l][nu][x'][y'] * dp[nu][r][x''][y''] (nu是l對應的另一邊括號)

  當l+1 == r的時候有:dp[l][r][0][1] = 1;  dp[l][r][1][0] = 1;

             dp[l][r][0][2] = 1;  dp[l][r][2][0] = 1;

細節:

如果l+1 == r 說明最里面那1對,一共就只有4種情況,同理如果兩個括號相相匹也有4中情況,這就是為什么 這兩種情況詳細寫出左右括號顏色的原因,一開始糾結為什么第三種情況不用考慮,直接枚舉顏色就好了,萬一兩個一樣的呢。。。 注意 第三種是不匹配的,所以根本不用管i,j是不是可能相同,因為可能是這種的()(),然后dfs分別求出dp[l][k],dp[k+1][r]所有可能,dp[l][k]肯定是匹配的所以他下層dfs肯定是進入第二種或者第一種情況,dp[k+1][r]卻不一定是匹配的

這種遞歸的在區間dp里很常見,有深刻理解下,另一個遞歸的題目:

http://blog.csdn.net/QQ_34374664/article/details/59483996

深刻理解下遞歸

#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>using namespace std;const int Mod = 1e9 + 7;const int maxn = 750;long long dp[maxn][maxn][5][5], temp[maxn], match[maxn];int len;char str[maxn];void get_match()  //這里就是最簡單的括號匹配問題,用兩個數組記錄下,p作為“棧頂”{    len = strlen(str);    int p = 0;    for(int i = 0; i < len; i++)    {        if(str[i] == '(')            temp[p++] = i;        else        {            match[i] = temp[p-1];            match[temp[p-1]] = i;            p--;        }    }}void dfs(int l, int r){    if(l+1 == r)    {        dp[l][r][0][1] = 1;        dp[l][r][1][0] = 1;        dp[l][r][0][2] = 1;        dp[l][r][2][0] = 1;        return ;    }    if(match[l] == r)    {        dfs(l+1, r-1);        for(int i = 0; i < 3; i++)            for(int j = 0; j < 3; j++)  //這兩個括號是匹配的,所以他的兩個括號不能同時染色,其實也就是4種情況了,一一枚舉            {                if(i != 1)                    dp[l][r][1][0] = (dp[l][r][1][0]+dp[l+1][r-1][i][j])%Mod;                if(i != 2)                    dp[l][r][2][0] = (dp[l][r][2][0]+dp[l+1][r-1][i][j])%Mod;                if(j != 1)                    dp[l][r][0][1] = (dp[l][r][0][1]+dp[l+1][r-1][i][j])%Mod;                if(j != 2)                    dp[l][r][0][2] = (dp[l][r][0][2]+dp[l+1][r-1][i][j])%Mod;            }//        for(int i = 0; i < 3; i++)//            for(int j = 0; j < 3; j++)//                for(int x = 0; x < 3; x++)//                    for(int y = 0; y < 3; y++)//                    {//                        if(i && j) continue;//                        if(x == i && x) continue;//                        if(y == j && y) continue;//                        dp[l][r][i][j] = (dp[l][r][i][j] + dp[l+1][r-1][x][y])%Mod;//                    }    }    else    {        int k = match[l];        dfs(l, k);        dfs(k+1, r);        for(int i = 0; i < 3; i++)            for(int j = 0; j < 3; j++)                for(int x = 0; x < 3; x++)                    for(int y = 0; y < 3; y++)                    {                        if(x == y && x != 0) continue;                        dp[l][r][i][j] = (dp[l][r][i][j] + dp[l][k][i][x]*dp[k+1][r][y][j])%Mod;  //不匹配,括號顏色不必保證一個不染色,保證相鄰不重復就好了                    }    }}int main(){    scanf("%s", str);    get_match();    dfs(0, len-1);    long long ans = 0;    for(int i = 0; i < 3; i++)        for(int j = 0; j < 3; j++)        {            ans = (ans + dp[0][len-1][i][j]) % Mod;  //枚舉所有染色可能性,因為最開始的不一定左右匹配        }    printf("%lld/n", ans);    return 0;}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产欧美日韩中文字幕在线| 日韩欧美一区二区三区久久| 精品视频9999| 精品国产一区二区三区久久久| 3344国产精品免费看| 欧美老女人在线视频| 日韩精品在线观看视频| 欧美精品videossex88| 97国产suv精品一区二区62| 精品人伦一区二区三区蜜桃网站| 亚洲精品欧美日韩专区| 国产剧情日韩欧美| 欧美性猛交99久久久久99按摩| 欧洲中文字幕国产精品| 亚洲成人999| 亚洲偷熟乱区亚洲香蕉av| 97高清免费视频| 久久综合色影院| 一区二区三区视频免费在线观看| 欧美夜福利tv在线| 亚洲男人天堂2024| 欧美有码在线视频| 色综合伊人色综合网站| 国产日韩综合一区二区性色av| 国产欧美日韩精品在线观看| 日韩精品中文在线观看| 91tv亚洲精品香蕉国产一区7ujn| 在线播放国产精品| 色在人av网站天堂精品| 久久影视电视剧凤归四时歌| 亚洲国产精品大全| 中文字幕国产精品久久| 国产91色在线|免| 国产日韩欧美中文| 中文字幕亚洲欧美在线| 欧美在线视频播放| 亚洲欧美在线免费观看| 欧美日韩一区二区精品| 欧美在线视频一区| 久久国产精品视频| 尤物99国产成人精品视频| 欧美午夜片在线免费观看| 欧美自拍视频在线观看| 亚洲精品99999| 久久久精品中文字幕| 一个人www欧美| 亚洲香蕉成人av网站在线观看| 亚洲va欧美va在线观看| 欧美成年人视频网站欧美| 国产成人自拍视频在线观看| 欧美另类交人妖| 91精品国产91久久久| 欧美刺激性大交免费视频| 亚洲精品www久久久久久广东| 中文字幕久精品免费视频| 欧美大奶子在线| 国产精品18久久久久久麻辣| 国产精品大陆在线观看| 亚洲女人初尝黑人巨大| 国产专区精品视频| 97成人在线视频| 国产精品日日做人人爱| www高清在线视频日韩欧美| 51午夜精品视频| 中文字幕亚洲欧美在线| 日韩av免费在线| 久久精品中文字幕免费mv| 91视频国产精品| 中文字幕亚洲国产| 国产成人高清激情视频在线观看| 亚洲国产精品久久久久| 1769国内精品视频在线播放| 亚洲国产女人aaa毛片在线| 国产欧美久久久久久| 精品亚洲夜色av98在线观看| 久久久久久国产精品| 日韩视频免费在线观看| 91在线直播亚洲| 国产视频精品一区二区三区| 久久久精品免费视频| 97av在线视频免费播放| 久久精品精品电影网| 欧美午夜美女看片| 亚洲精品国产精品国自产在线| 欧美第一页在线| 在线观看免费高清视频97| 国产精品视频一区二区三区四| 97人洗澡人人免费公开视频碰碰碰| 国产欧美精品日韩| 成人免费看片视频| 欧美在线视频免费播放| zzjj国产精品一区二区| 亚洲欧美激情在线视频| 日韩成人在线网站| 亚洲a成v人在线观看| 精品成人乱色一区二区| 日本午夜人人精品| 97在线免费观看视频| 日本国产精品视频| 久久全国免费视频| 欧美日产国产成人免费图片| 国内精品一区二区三区| 精品日韩视频在线观看| 黄色成人在线播放| 91中文在线视频| 久久久噜噜噜久噜久久| 国产精品成人国产乱一区| 久久久影视精品| 亚洲成人av在线播放| 日韩欧美大尺度| 欧美激情伊人电影| 欧美日韩国产丝袜另类| 国产精品久久久久免费a∨大胸| 精品无人区乱码1区2区3区在线| 亚洲大胆人体av| 国产色视频一区| 日韩av在线一区二区| 欧洲s码亚洲m码精品一区| 国产一区二区色| 国产在线观看不卡| 国产成人精品免高潮费视频| 日韩在线观看成人| 欧美一级高清免费播放| 久久久精品中文字幕| 91产国在线观看动作片喷水| 欧美日韩在线视频一区二区| 久久精品亚洲热| 欧美日韩国产va另类| 中文字幕在线观看亚洲| 国产成人精品一区二区三区| 国模极品一区二区三区| 精品网站999www| 日韩精品免费一线在线观看| 久久91亚洲人成电影网站| 欧美亚洲成人免费| 综合国产在线视频| 国产伦精品一区二区三区精品视频| 最近更新的2019中文字幕| 欧美丰满少妇xxxxx做受| 国产精品久久色| 色999日韩欧美国产| 日韩国产在线播放| 最新国产精品亚洲| 日韩免费观看视频| 日韩av在线网站| 日韩视频在线免费观看| 亚洲一区二区免费在线| 日本久久久久亚洲中字幕| 欧美激情第6页| 欧美日韩国产麻豆| 久久九九精品99国产精品| 国产精品电影久久久久电影网| 欧美成人在线免费| 国产亚洲免费的视频看| 国产精品中文久久久久久久| 狠狠做深爱婷婷久久综合一区| 国产亚洲美女精品久久久| www日韩中文字幕在线看| 久久久久久久久久久91| 亚洲国产日韩一区| 中文字幕国产亚洲2019| 国内精品小视频| 亚洲aⅴ日韩av电影在线观看| 日韩国产激情在线|