POJ 2955 Brackets 区间DP 入门
2016-03-01 21:58
447 查看
dp[i][j]代表i->j区间内最多的合法括号数
注意要对于区间的最值合并
ac代码:
if(s[i]=='('&&s[j]==')'||s[i]=='['&&s[j]==']') dp[i][j]=dp[i+1][j-1]+2; dp[i][j]=max{dp[i][k]+dp[k+1][j]};
注意要对于区间的最值合并
ac代码:
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int check(char a,char b) { if(a=='('&&b==')') return 1; if(a=='['&&b==']') return 1; return 0; } int main() { char str[111]; int dp[111][111],i,j,k,len; while(scanf("%s",str)!=EOF) { if(!strcmp(str,"end")) break; len=strlen(str); memset(dp,00,sizeof(dp)); for(k=1;i<len;k++) ////表示区间长度,从0-len更新 { for(i=0,j=k;j<len;i++,j++) { if(check(str[i],str[j])) dp[i][j]=dp[i+1][j-1]+2; for(int x=i;x<j;x++) // //区间最值合并 { dp[i][j]=max(dp[i][j],dp[i][x]+dp[x][j]); } } } printf("%d\n",dp[0][len-1]); } return 0; }
相关文章推荐
- Search a 2D Matrix
- 算法设计的方法
- mysql 常见错误:Can't create table... errno150原因分析
- 算法设计的方法
- Mac的MySQL无法启动的原因
- 不稳定的传送门
- [leetcode323]Number of Connected Components in an Undirected Graph
- 基数排序
- Wikioi 1080一维树状数组
- win下如何解决在chrome的同源访问问题
- Android学习心得第四课
- Delete Last Element
- 魔卡少女
- Android 5.0之后 点击 悬浮穿回到顶部。
- Android Studio 1.5启动出现“SDK Manager: failed to install”问题的解决
- 差分约束
- centos 6.5 samba简单配置
- nodejsPath
- 7、压缩与解压缩
- 中序遍历二叉树——递归