POJ2955 Brackets (區間DP)
題目連結:
http://poj.org/problem?id=2955
題意:
一個區間內最長的匹配的括號的最大長度
分析:
我們設DP[i][j]表示從i,到j 的最長的匹配的括號的長度,
如果i-1與j+1是匹配的話 那麼 DP[i-1][J+1]=DP[i][j]+2;
DP[i][j]=max{DP[i][j],dp[i][k]+dp[k+1][j]};
程式碼如下:
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int maxn = 110;
int dp[maxn][maxn];
char a[maxn];
bool judge(int i,int j)
{
if(a[i]=='('&&a[j]==')'||a[i]=='['&&a[j]==']')
return true;
return false;
}
int main()
{
while(~scanf("%s",a)){
if(strcmp(a,"end")==0) break;
int len=strlen(a);
memset(dp,0,sizeof(dp));
for(int i=2;i<=len;i++){//列舉長度
for(int j=0;j+i-1<len;j++){//列舉起點
int e = j+i-1;
if(judge(j,e)) dp[j][e]=dp[j+1][e-1]+2;
for(int k=j;k<e;k++)
dp[j][e]=max(dp[j][k]+dp[k+1][e],dp[j][e]);
}
}
printf("%d\n",dp[0][len-1]);
}
return 0;
}
相關文章
- POJ 2955-Brackets(括號匹配-區間DP)Racket
- POJ1141 ZOJ1463 Brackets Sequence【區間dp】Racket
- 區間dp
- 【DP】區間DP入門
- POJ 1141 Brackets Sequence(記錄路徑的dp)Racket
- 區間dp 合併石子問題
- BracketsRacket
- AtCoder Regular Contest 104——C區間dp
- 區間問題(非DP型別)及變形型別
- Codeforces Round #336 (Div. 2) D 區間dp
- Codeforces 245H Queries for Number of Palindromes:區間dp
- 一類適合記憶化搜尋的區間dp
- NOIP2003加分二叉樹[樹 區間DP]二叉樹
- 石子合併問題 (樸素區間DP&&GarsiaWachs演算法)演算法
- 我使用的brackets外掛Racket
- pku 1141 Brackets SequenceRacket
- 二叉搜尋樹 [四邊形不等式優化區間dp]優化
- BZOJ 1032: [JSOI2007]祖碼Zuma 區間DPJS
- poj1179 區間dp(記憶化搜尋寫法)有巨坑!
- px,in,mm,pt,dp,dip,sp 之間的換算公式以及區別 螢幕密度公式
- leetcode:1000. 合併石頭的最低成本(區間dp,困難)LeetCode
- Android px、dp、sp之間相互轉換Android
- lightoj 1031 - Easy Game 【區間dp】360 2017筆試程式設計題3GAM筆試程式設計
- Codeforces 509F Progress Monitoring:區間dp【根據遍歷順序求樹的方案數】
- poj 3468 區間更新 整個區間加一個數和區間求和操作
- 【樹狀陣列 區間更新區間查詢】code陣列
- 兩分鐘理解Android中PX、DP、SP的區別Android
- px、dp和sp,這些單位有什麼區別?
- acm-(區間dp、迴文串、子序列)ICPC SG Preliminary Contest 2018 C - Making PalindromesACM
- RQNOJ 302 PID302 / [NOIP2001]統計單詞個數(區間dp)
- bzoj 3864: Hero meet devil [dp套dp]dev
- 序列 DP
- 樹狀陣列的區間查詢與區間修改陣列
- DP動態規劃-爬塔(雙層dp)動態規劃
- 日期區間查詢
- STL區間成員函式及區間演算法總結函式演算法
- poj 3237 樹鏈剖分(區間更新,區間查詢)
- 狀壓 dp