博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 2955 Brackets 括号匹配 区间dp
阅读量:4071 次
发布时间:2019-05-25

本文共 902 字,大约阅读时间需要 3 分钟。

题意:最多有多少括号匹配

思路:区间dp,模板dp,区间合并。

对于a[j]来说:

刚开始的时候,转移方程为dp[i][j]=max(dp[i][j-1],dp[i][k-1]+dp[k][j-1]+2), a[k]与a[j] 匹配,结果一组数据出错

([]])
  检查的时候发现dp[2][3]==2,对,dp[2][4]=4,错了,简单模拟了一下发现,dp[2][4]=dp[2][1]+dp[2][3]+2==4,错了

此时2与4已经匹配,2与3已经无法再匹配;

故转移方程改为dp[i][j]=max(dp[i][j-1],dp[i][k-1]+dp[k+1][j-1]+2),a[k]放弃使用,幸运的一次ac

代码:

#include
#include
#include
#include
using namespace std;char a[110];int dp[110][110];int main(){ while(scanf("%s",a+1)!=EOF) { int lena=strlen(a+1); int i,j,k; if(lena==3&&a[1]=='e'&&a[2]=='n'&&a[3]=='d') { break; } //cout<<"lena== "<
<
=1;i--) { for(j=i+1;j<=lena;j++) { dp[i][j]=dp[i][j-1]; for(k=i;k<=j-1;k++) { if((a[k]=='('&&a[j]==')')||(a[k]=='['&&a[j]==']')) { dp[i][j]=max(dp[i][k-1]+dp[k+1][j-1]+2,dp[i][j]); } } //cout<<"i== "<
<<" j== "<
<<" dp[i][j]== "<
<

转载地址:http://vygji.baihongyu.com/

你可能感兴趣的文章
IOS开发的开源库
查看>>
Jenkins - sonarqube 代码审查
查看>>
Jenkins + Docker + SpringCloud 微服务持续集成(一)
查看>>
Jenkins + Docker + SpringCloud 微服务持续集成 - 单机部署(二)
查看>>
Jenkins + Docker + SpringCloud 微服务持续集成 - 高可用集群部署(三)
查看>>
Linux 粘滞位 suid sgid
查看>>
C#控件集DotNetBar安装及破解
查看>>
Winform皮肤控件IrisSkin4.dll使用
查看>>
Winform多线程
查看>>
C# 托管与非托管
查看>>
Node.js中的事件驱动编程详解
查看>>
mongodb管理与安全认证
查看>>
nodejs内存控制
查看>>
nodejs Stream使用中的陷阱
查看>>
MongoDB 数据文件备份与恢复
查看>>
MongoDB数据库插入、更新和删除操作详解
查看>>
MongoDB文档(Document)全局唯一ID的设计思路
查看>>
mongoDB简介
查看>>
Redis持久化存储(AOF与RDB两种模式)
查看>>
memcached工作原理与优化建议
查看>>