区间DP基础篇之 POJ2955——Brackets
来源:互联网 发布:java判断年份月份 编辑:程序博客网 时间:2024/06/08 20:55
怒拿一血,first blood,第一个区间DP,第一次就这样子莫名其妙不知不觉滴没了~~~
题目虽然是鸟语,但还是很赤裸裸的告诉我们要求最大的括号匹配数,DP走起~
dp[i][j]表示区间[i,j]的最大匹配数,那么最重要的状态转移方程就是:
dp[i][j]=max(dp[i][k]+dp[k+1][j])
对啦,要先初始化边界啊,两步走~:
memset(dp,0,sizeof dp);
if str[i]==str[i+1] 则:dp[i][i+1]=2 请看---->> 该字符串 ( [ ] [ ] [ ) 很好懂有木有
万恶的贴代码:
#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>using namespace std;int dp[110][110];char s[110];bool check(int i,int j)//判断是不是匹配的{ if(s[i]=='['&&s[j]==']') return true; if(s[i]=='('&&s[j]==')') return true; return false;}int main(){ while(scanf("%s",s)!=EOF){ if(strcmp(s,"end")==0) break; int l=strlen(s); memset(dp,0,sizeof dp); for(int i=0;i<l;i++){ //初始化 if(check(i,i+1)){ dp[i][i+1]=2; } } for(int p=3;p<=l;p++){ //枚举区间长度 for(int i=0;i<=l-p;i++){ //枚举区间起点 int j=i+p-1; if(check(i,j)){ dp[i][j]=dp[i+1][j-1]+2; } for(int k=i;k<j;k++){ //将区间分成两段 dp[i][j]=max(dp[i][j],dp[i][k]+dp[k][j]); } } } cout<<dp[0][l-1]<<endl; } return 0;}
0 0
- 区间DP基础篇之 POJ2955——Brackets
- poj2955——Brackets(区间dp)
- POJ2955——Brackets(区间dp)
- POJ2955:Brackets(区间DP)
- poj2955 Brackets 区间dp
- POJ2955 Brackets (区间DP)
- poj2955 Brackets (区间dp)
- POJ2955:Brackets(区间DP)
- POJ2955 Brackets(区间dp)
- poj2955 Brackets(区间dp)
- poj2955 Brackets 【区间dp】
- POJ2955 Brackets 【区间dp】
- poj2955 Brackets--区间dp
- POJ2955 Brackets(区间DP)
- POJ2955 Brackets(区间DP)
- poj2955 Brackets 简单区间dp
- POJ2955 Brackets(区间DP)
- 【区间DP】POJ2955[Brackets]题解
- C#入门一(规范代码很重要)
- jdk的下载及环境变量的配置
- 黑马程序员_java高新技术之反射
- 心目中的编程高手zz, 有点academic风格的说^_^
- 算法竞赛入门经典7.1.1除法
- 区间DP基础篇之 POJ2955——Brackets
- Linux--- 手工释放系统cache
- 51单片机:利用定时器中断写一个简易加法计算器,按键消抖算法很好。
- android sdk manager无法更新
- 看不清楚未来,请做好现在
- 把View转化成Bitmap的方法
- hdu 2289 二分
- jQuery选择器
- iOS学习笔记——视图上移与键盘弹回