POJ 2955 Brackets(区间DP)
2016-05-21 20:51
274 查看
题目:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=77874#problem/C
代码:
dp[i][j] = max(dp[i +1][j], dp[i + 1][k - 1] + dp[k +1][j] + 2)
区间DP,如果顺序不对,可能导致的是,
f[i,j]要根据f[i,k]推,而f[i,k]还没有求出来。
代码:
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; char a[105]; int dp[105][105]; int judge(int i,int j) { if(a[i]=='('&&a[j]==')') return 1; if(a[i]=='['&&a[j]==']') return 1; return 0; } int main() { while(~scanf("%s",a)) { if(a[0]=='e') break; int str=strlen(a); for(int i=str-1;i>=0;i--) //从后往前找 { for(int j=i+1;j<=str;j++) { dp[i][j]=dp[i+1][j]; for(int k=i+1;k<=j;k++) { if(judge(i,k)) { dp[i][j]=max(dp[i][j],dp[i+1][k-1]+dp[k+1][j]+2); } } } } printf("%d\n",dp[0][str-1]); } }
dp[i][j] = max(dp[i +1][j], dp[i + 1][k - 1] + dp[k +1][j] + 2)
区间DP,如果顺序不对,可能导致的是,
f[i,j]要根据f[i,k]推,而f[i,k]还没有求出来。
相关文章推荐
- 堆和栈的区别
- 需求分析
- 堆(Heap)的建立
- Struts2的第一个程序
- qsort与sort的使用方法(比较函数详析)
- 2016"百度之星" - 初赛(Astar Round2A)1003(hdu5692)dfs序+线段树
- ContentProvider基本使用(1)
- webstorm预览时把浏览器地址localhost改成IP
- 日记
- 【Hibernate】初学Hibernate(一)
- HDU 5656 CA Loves GCD
- BZOJ 1827: [Usaco2010 Mar]gather 奶牛大集会
- 学习篇---progressbar
- redis-命令返回值
- 坐标转换——GCJ-02
- 第6课:Spark Streaming源码解读之Job动态生成和深度思考
- android drawBitmapMesh()图片旗帜飘扬效果
- NSObject的方法说明
- 日期时间选择控件
- Linux操作系统基础解析之(四)——Linux基本命令剖析(1)