出處:https://onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4501
解題策略:DP
dp[i][j]表示字串第i個到第j個增加括號的最少個數
第一種情形
若s[i]與s[j]是一對括號()或[],則dp[i][j]=min(dp[i][j],dp[i+1][j-1])
第二種情形
字串s[i到j]可以分成前後兩個部分
i<=k<j
dp[i][j]=min(dp[i][j], dp[i][k]+dp[k+1][j])
符合第一種情形也要可慮第二種情形,例如[][],只考慮第一種情形會被視為][,需要兩個括弧,
若考慮第二種情形,則不需要括弧
初始化
dp[i][i]=1需要一個括弧
dp[i+1][i]=0,若s[i]與s[i+1]配對,j=i+1,
符合第一種情形會取dp[i+1][j-1]相當於dp[i+1][(i+1)-1]
測資範例,輸入有可能為空字串,第二個測資為空字串
3
[]
][()
參考程式如下