1 条题解
-
12023gdsy119 LV 5 @ 2024-04-06 13:52:29
因为是匹配括号,所以见到两个相同的直接忽略,继续处理内层即可。具体解析见代码。
#include<bits/stdc++.h> using namespace std; int n,dp[105][105];//dp[i][j]:从i到j要加的括号数 string s; int main(){ cin>>s; n=s.size(); s=' '+s;//加空格防止错误 for(int i=1;i<=n;i++)//只有字符的区间要加一个括号 dp[i][i]=1; for(int len=2;len<=n;len++){//长度 for(int st=1,ed=st+len-1;ed<=n;st++,ed++){//起点和终点 dp[st][ed]=0x3f3f3f3f;//初始化为极大值 for(int mid=st;mid<=ed;mid++){//中点 dp[st][ed]=std::min(dp[st][ed],dp[st][mid]+dp[mid+1][ed]);//正常情况则正常由断点分开计算 if(s[st]=='('&&s[ed]==')'||s[st]=='['&&s[ed]==']')//有一对括号 dp[st][ed]=std::min(dp[st][ed],dp[st+1][ed-1]);//直接继承,不必再考虑此括号 } } } printf("%d",dp[1][n]); return 0; }
- 1
信息
- 难度
- 9
- 分类
- (无)
- 标签
- (无)
- 递交数
- 8
- 已通过
- 3
- 通过率
- 38%
- 上传者