sdut 1451 括號東東 DP

2021-09-06 08:01:00 字數 1636 閱讀 9470

題意:中文.....

思路:pku有一道題,經典的括號匹配(區間dp)題目,那道題目是求的最長滿足條件的子串的長度,那裡的子串與這裡的子串條件不一樣。

詳細:對於這個例子

)((())))(()())
pku的最長子串是12

而這裡是6 

這裡我們是求的連續的滿足的子串。

dp[i]表示0到i的最長的滿足的連續的子串

則有:if(str[i - dp[i - 1] - 1] == '(' && str[i] == ')') dp[i] = dp[i - dp[i - 1] - 1] + 2;

if (dp[i - dp[i - 1] - 2])

dp[i] += dp[i - dp[i - 1] - 2]

//#pragma comment(linker,"/stack:327680000,327680000")

#include #include #include #include #include #include #include #include #include #include #include #include #include #include #define cl(arr, val) memset(arr, val, sizeof(arr))

#define ll long long

#define inf 0x7f7f7f7f

#define lc l,m,rt<<1

#define rc m + 1,r,rt<<1|1

#define pi acos(-1.0)

#define ll long long

#define l(x) (x) << 1

#define r(x) (x) << 1 | 1

#define mid(l, r) (l + r) >> 1

#define min(x, y) (x) < (y) ? (x) : (y)

#define max(x, y) (x) < (y) ? (y) : (x)

#define e(x) (1 << (x))

#define iabs(x) (x) < 0 ? -(x) : (x)

#define out(x) printf("%i64d\n", x)

#define lowbit(x) (x)&(-x)

#define read() freopen("din.txt", "r", stdin)

#define write() freopen("dout.txt", "w", stdout);

#define n 1000007

using namespace std;

int dp[n];

int ans,num;

char str[n];

int n;

int main()

}if (ans < dp[i])

else if (ans == dp[i]) num++;

}if (ans == 0) printf("0 1\n");

else

printf("%d %d\n",ans,num);

}return 0;

}

14 5繼承與組合

程式的版權和版本宣告部分 檔名稱 a.cpp 作 者 孔雲 完成日期 2014年5月29日 版 本 號 v1.0 輸入描述 num,name,year,month,day 和修改後的year,month,day 問題描述 1 birthdate 生日類 含有 year,month,day 等資料成員...

1 4 5 收集trace日誌

trace日誌有助於發現故障的詳細資訊,確認問題原因 影響範圍 故障現象。前提條件 alert日誌提及到的一些trace日誌和incident trace檔案,要一併收集。操作步驟 步驟 1 以oracle使用者登入。步驟 2 根據alert日誌中提示所涉及的trace日誌檔案,收集trace日誌。...

145 僅僅反轉字母

題目描述 給定乙個字串 s,返回 反轉後的 字串,其中不是字母的字元都保留在原地,而所有字母的位置發生反轉。示例 1 輸入 ab cd 輸出 dc ba 示例 2 輸入 a bc def ghij 輸出 j ih gfe dcba 示例 3 輸入 test1ng leet code q 輸出 qed...