CF149D Coloring Brackets
CF149D Coloring Brackets - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
比较容易看出区间 dp,设
容易发现,转移会用到括号的匹配信息,因此我们先
然后发现
然而,一个括号的染色状态会影响其他括号的染色状态,也就是染色上存在限制。一般奇怪的限制都考虑设入 dp 状态,因此设
先考虑边界情况,因为一般较为简单,而且让人有成就感。
边界是
然后考虑一般,我们发现可以分为两种情况:
对于
显然此时相当于
对于
具体来说,我们分别枚举
至此区间 dp 的
另外有一点,
将蓝红色简单互换就可以证明上面这四个等式。因此转移上可以偷懒(雾),等式中,计算出一个就能计算出另一个。
/*
* @Author: crab-in-the-northeast
* @Date: 2022-11-23 17:19:37
* @Last Modified by: crab-in-the-northeast
* @Last Modified time: 2022-11-23 17:55:13
*/
#include <bits/stdc++.h>
#define int long long
inline std :: pair <std :: string, int> rest(bool space = true) {
std :: string s;
char ch = getchar();
for (; !isgraph(ch); ch = getchar());
for (; isgraph(ch); ch = getchar())
s.push_back(ch);
return {space ? " " + s : s, s.length()};
}
const int maxn = 705;
const int mod = (int)1e9 + 7;
std :: string s;
int f[maxn][maxn][3][3];
int p[maxn];
void sol(int l, int r) {
if (r == l + 1) {
f[l][r][0][1] = f[l][r][1][0] = f[l][r][0][2] = f[l][r][2][0] = 1;
return ;
}
if (r == p[l]) {
sol(l + 1, r - 1);
f[l][r][0][1] = f[l][r][0][2] = (
f[l + 1][r - 1][0][0] + f[l + 1][r - 1][0][2] +
f[l + 1][r - 1][1][0] + f[l + 1][r - 1][1][2] +
f[l + 1][r - 1][2][0] + f[l + 1][r - 1][2][2]) % mod;
f[l][r][1][0] = f[l][r][2][0] = (
f[l + 1][r - 1][0][0] + f[l + 1][r - 1][2][0] +
f[l + 1][r - 1][0][1] + f[l + 1][r - 1][2][1] +
f[l + 1][r - 1][0][2] + f[l + 1][r - 1][2][2]) % mod;
} else {
sol(l, p[l]);
sol(p[l] + 1, r);
for (int a = 0; a < 3; ++a)
for (int b = 0; b < 3; ++b)
for (int c = 0; c < 3; ++c)
for (int d = 0; d < 3; ++d)
if (!b || b != c)
(f[l][r][a][d] +=
(f[l][p[l]][a][b] * f[p[l] + 1][r][c][d])
% mod) %= mod;
}
}
signed main() {
auto _ = rest(); s = _.first; int n = _.second;
std :: stack <int> st;
for (int i = 1; i <= n; ++i) {
if (s[i] == '(')
st.push(i);
else {
p[st.top()] = i;
st.pop();
}
}
sol(1, n);
int ans = 0;
for (int a = 0; a < 3; ++a)
for (int b = 0; b < 3; ++b)
(ans += f[1][n][a][b]) %= mod;
printf("%lld\n", ans);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】