poj2955(区间dp)
来源:互联网 发布:java反射获取对象属性 编辑:程序博客网 时间:2024/05/22 01:57
题目
大意:给出一个字符串,求其中最长括号都已匹配好子串(只需知道长度即可)
比较简单的区间dp,
对于f[i][i+1],如果第i个字符与第i+1个匹配则f[i][i+1]=2否则等于0
其他的,f[i][j]=max(f[i][k]+f[k+1][j])(分两段考虑),(形式类似(S1)(S2))
如果第i个字符与第j个字符匹配,则最优方案中两者可能在同一段,
此时f[i][j]=max(f[i][j],f[i+1][j-1]+2)(形式类似(S))
代码如下:
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.util.StringTokenizer;class Reader {static BufferedReader reader;static StringTokenizer tokenizer;static void init(InputStream input) {reader = new BufferedReader(new InputStreamReader(input));tokenizer = new StringTokenizer("");}static String next() throws IOException {while (!tokenizer.hasMoreTokens()) {tokenizer = new StringTokenizer(reader.readLine());}return tokenizer.nextToken();}static int nextInt() throws IOException {return Integer.parseInt(next());}}public class Main {/** * @param args */static String str;static char ch[];static int len;static int f[][];static boolean m[][];private static boolean match(int a, int b) {if ((ch[a - 1] == '(') && (ch[b - 1] == ')'))return true;if ((ch[a - 1] == '[') && (ch[b - 1] == ']'))return true;return false;}private static int getmax(int a, int b) {return a > b ? a : b;}private static void deal() {ch = str.toCharArray();len = ch.length;m = new boolean[len + 1][len + 1];for (int i = 1; i < len; i++)for (int j = i + 1; j <= len; j++)m[i][j] = match(i, j);f = new int[len + 1][len + 1];for (int i = 1; i < len; i++)if (m[i][i + 1])f[i][i + 1] = 2;for (int i = len - 2; i >= 1; i--) {for (int j = i + 2; j <= len; j++) {if (m[i][j])f[i][j] = f[i + 1][j - 1] + 2;for (int k = i; k < j; k++)f[i][j] = getmax(f[i][k] + f[k + 1][j], f[i][j]);}}System.out.println(f[1][len]);}public static void main(String[] args) throws IOException {// TODO Auto-generated method stubReader.init(System.in);str = Reader.next();while (!str.equals("end")) {deal();str = Reader.next();}}}
0 0
- POJ2955:Brackets(区间DP)
- 区间dp经典 poj2955
- poj2955(区间DP)
- poj2955 Brackets 区间dp
- POJ2955 Brackets (区间DP)
- poj2955(区间dp)
- poj2955 Brackets (区间dp)
- 区间dp POJ2955 Bracket
- poj2955(区间dp)
- POJ2955:Brackets(区间DP)
- POJ2955 Brackets(区间dp)
- poj2955区间dp?
- poj2955 区间DP
- poj2955(区间dp)
- poj2955 Brackets(区间dp)
- poj2955 Brackets 【区间dp】
- POJ2955 区间DP
- POJ2955 区间DP
- windows编程链接时遇到error LNK2001 无法解析的外部符号_imp_timeGetTime@0
- Date 对象 之获取事件与制作倒计时
- 【HTML5学习笔记】7:查漏补缺1
- QT5.7交叉编译安装到arm
- LeetCode : Sqrt(x)
- poj2955(区间dp)
- import matplotlib.pyplot 错误
- C++产生随机数
- Java开发中的23种设计模式详解(转)
- 解决bash: mysql: command not found... 的方法
- 车联网问题研究中如何将地图数据可视化显示出来
- 浏览器限制ajax跨域请求问题------SSM解决方案
- CSS-溢出的处理
- 1104. Sum of Number Segments 解析