博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj2955(区间dp)
阅读量:6442 次
发布时间:2019-06-23

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

 

题目连接:

题意:给一个由()[]四种字符任意排列组成的字符串,求最长合法的不连续字串的长度。

分析:如果找到一对匹配的括号[xxx]oooo,就把区间分成两部分,一部分是xxx,一部分是ooo,然后以此递归直到区间长度为<=1. 

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define LL long long#define mod 100000000#define inf 0x3f3f3f3f#define eps 1e-9#define N 100010#define FILL(a,b) (memset(a,b,sizeof(a)))#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1using namespace std;int dp[110][110];char str[110];bool judge(int i,int j){ return (str[i]=='('&&str[j]==')')||(str[i]=='['&&str[j]==']');}int dfs(int l,int r){ if(dp[l][r]!=-1)return dp[l][r]; if(l>=r)return 0; int temp=dfs(l+1,r); for(int i=l+1;i<=r;i++) { if(judge(l,i)) temp=max(temp,dfs(l+1,i-1)+dfs(i+1,r)+2); } return dp[l][r]=temp;}int main(){ int n; while(scanf("%s",str+1)>0) { if(strcmp(str+1,"end")==0)break; FILL(dp,-1);n=strlen(str+1); printf("%d\n",dfs(1,n)); }}
View Code

 

转载于:https://www.cnblogs.com/lienus/p/4266567.html

你可能感兴趣的文章
ivy resolve标签
查看>>
.NET Web后台动态加载Css、JS 文件,换肤方案
查看>>
使用开源软件vlc media player 录制桌面视频
查看>>
web前端(2)—— 前端技术介绍
查看>>
ife2018 零基础学院 day 3
查看>>
Kali Linux信息收集之nbtscan-unixwiz
查看>>
hdu 5476 (计算几何)
查看>>
51 nod 1610 路径计数(Moblus+dp)
查看>>
通用报文解析服务的演进之路(基于磁盘目录的分布式消息消费者服务)之三...
查看>>
Js中分号使用总结
查看>>
读《从一到无穷大》
查看>>
zend studio 8 注册 码
查看>>
CentOS LAMP环境 配置详解
查看>>
任正非:华为为什么要坚持工业科学管理
查看>>
实现法线贴图3D模型渲染的脚本代码(附源码)
查看>>
iPhone开发面试题--葵花宝典
查看>>
05-Git
查看>>
Spring quartz 单机、集群+websocket集群实现文本、图片、声音、文件下载及推送、接收及显示...
查看>>
SPOJ104 Highways,跨越数
查看>>
使用rman备份异机恢复数据库
查看>>