当前位置: 首页 > news >正文

题解:洛谷 CF149D Coloring Brackets

本文分享的必刷题目是从蓝桥云课洛谷AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。

欢迎大家订阅我的专栏:算法题解:C++与Python实现!

附上汇总贴:算法竞赛备考冲刺必刷题(C++) | 汇总


【题目来源】

洛谷:CF149D Coloring Brackets - 洛谷

【题目描述】

给出一个配对的括号序列(如 “(())() \texttt{(())()}(())()”、“() \texttt{()}()” 等,“)() \texttt{)()})()”、“(() \texttt{(()}(()”是不符合要求的),对该序列按照以下方法染色。

  1. 一个括号可以染成红色、蓝色或者不染色。
  2. 一对匹配的括号需要且只能将其中一个染色。
  3. 相邻两个括号颜色不能相同(但都可以不染色)。

求符合条件的染色方案数,对1000000007 10000000071000000007取模。

【输入】

一行一个字符串s ss,表示括号序列(2 ⩽ ∣ s ∣ ⩽ 700 2 \leqslant |s| \leqslant 7002s700)。

【输出】

一个数字,表示染色的方案数(对1000000007 10000000071000000007取模)。

【输入样例】

(())

【输出样例】

12

【算法标签】

#提高plus #区间DP

【代码详解】

#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongconstintN=705,mod=1e9+7;// 定义常量和模数intn,match[N],ans;// n: 括号序列长度,match: 匹配括号的位置,ans: 答案intf[N][N][3][3];// DP数组,f[i][j][x][y]表示区间[i,j]的染色方案数,i染x色,j染y色string s;// 括号序列stack<int>stk;// 用于括号匹配的栈signedmain(){cin>>s;// 输入括号序列n=s.length();// 获取长度s=" "+s;// 在字符串前加空格,使下标从1开始for(inti=1;i<=n;i++)// 括号匹配{if(s[i]=='(')// 左括号入栈stk.push(i);else{// 右括号匹配match[stk.top()]=i;// 记录匹配位置match[i]=stk.top();stk.pop();// 弹出栈顶左括号}}// 区间DPfor(intlen=2;len<=n;len++)// 枚举区间长度for(inti=1;i+len-1<=n;i++)// 枚举区间起点{intj=i+len-1;// 区间终点if(i+1==j)// 区间长度为2,即一对括号{// 相邻括号的合法染色方案f[i][j][0][1]=f[i][j][0][2]=f[i][j][1][0]=f[i][j][2][0]=1;continue;}if(match[i]==j)// i和j是匹配的括号{for(intx=0;x<=2;x++)for(inty=0;y<=2;y++){// 枚举内部区间的染色if(y!=1)// 右括号不能染1f[i][j][0][1]=(f[i][j][0][1]+f[i+1][j-1][x][y])%mod;if(y!=2)// 右括号不能染2f[i][j][0][2]=(f[i][j][0][2]+f[i+1][j-1][x][y])%mod;if(x!=1)// 左括号不能染1f[i][j][1][0]=(f[i][j][1][0]+f[i+1][j-1][x][y])%mod;if(x!=2)// 左括号不能染2f[i][j][2][0]=(f[i][j][2][0]+f[i+1][j-1][x][y])%mod;}}else// i和j不匹配{intk=match[i];// i的匹配位置for(intx=0;x<=2;x++)for(inty=0;y<=2;y++)for(intp=0;p<=2;p++)for(intq=0;q<=2;q++){// 枚举四个端点的颜色if((p==1&&q==1)||(p==2&&q==2))// 相邻颜色不能相同continue;f[i][j][x][y]=(f[i][j][x][y]+f[i][k][x][p]*f[k+1][j][q][y]%mod)%mod;}}}// 统计答案for(inti=0;i<=2;i++)for(intj=0;j<=2;j++)ans=(ans+f[1][n][i][j])%mod;// 累加所有染色方案cout<<ans<<endl;// 输出答案return0;}

【运行结果】

(()) 12
http://www.jsqmd.com/news/903660/

相关文章:

  • Logrotate 配置指南
  • 安规综合测试仪人机交互选型:高压电磁环境下的显示屏适配要点
  • AI 商学院与算力共享:星瀚云如何让 AI“用得深“、让算力“活起来“
  • 开发者说直播预告|5月28日19:00,optimized_transducer算子任务开发与性能调优
  • G-Helper终极指南:释放华硕笔记本潜能的轻量级控制工具
  • 2026年凯里国防班哪家好?低分进高分出与定向士官升学成新标准 - 年度推荐企业名录
  • 新买的SSD移动硬盘到手别急着用!先搞懂exFAT和NTFS怎么选(附T7实测)
  • 2026年第二季度GEO服务商按预算选型指南:
  • ChanlunX:通达信缠论可视化插件终极指南,三步实现专业级技术分析
  • 2026年凯里黔南国防军士预备班怎么选?从低分进到高分出的完整升学指南 - 年度推荐企业名录
  • 拯救卡顿Windows 11:一键清理工具让你的电脑重获新生
  • 跨越平台壁垒:Electron音乐软件的云原生部署新范式
  • 为Claude Code配置Taotoken后端解决访问限制问题
  • QuickRecorder:3分钟解决macOS录屏难题的轻量级神器
  • 鸿蒙 HarmonyOS 6 | Pura X Max 鸿蒙原生适配 14:大屏弹窗改成侧边面板
  • 从零到一:如何用新蜂商城快速构建你的电商帝国
  • 3分钟解锁网易云音乐NCM格式:Windows用户必备的免费图形化解密工具终极指南
  • 2026南昌医疗纠纷律师评测:哪家负责任?教你筛选靠谱医疗纠纷律师 - 品牌2025
  • 国内合规沟槽管件厂家技术解析与选型参考 - 奔跑123
  • 如何快速备份QQ空间:终极自动化解决方案指南
  • 海南美尔居家具:海口KTV金属模块找哪家 - LYL仔仔
  • 2026年5月济南黄金回收哪家好?8家实测 + 避坑全攻略 - 生活测评君
  • 820亿Credits等于多少Tokens?
  • 从‘形态学’到‘TIN加密’:一文讲透LiDAR点云地面滤波的演进与选型指南
  • 有道云笔记备份神器:零门槛实现笔记自由迁移
  • MoneyPrinterTurbo终极指南:AI视频生成革命,一键创作专业短视频
  • 靠谱蒸包设备品牌推荐:蒸包公,智能赋能轻餐饮便民经营 - 中媒介
  • FGO自动化终极指南:5分钟掌握解放双手的游戏助手
  • Java的运算符
  • 猫抓Cat-Catch:3步搞定网页视频下载,彻底告别资源丢失烦恼