NYOJ 15 括弧匹配(二),nyoj15括弧匹配

來源:互聯網
上載者:User

NYOJ 15 括弧匹配(二),nyoj15括弧匹配

括弧匹配(二)時間限制:1000 ms  |  記憶體限制:65535 KB難度:6
描述
給你一個字串,裡面只包含"(",")","[","]"四種符號,請問你需要至少添加多少個括弧才能使這些括弧匹配起來。
如:
[]是匹配的
([])[]是匹配的
((]是不匹配的
([)]是不匹配的
輸入
第一行輸入一個正整數N,表示測試資料群組數(N<=10)
每組測試資料都只有一行,是一個字串S,S中只包含以上所說的四種字元,S的長度不超過100
輸出
對於每組測試資料都輸出一個正整數,表示最少需要添加的括弧的數量。每組測試輸出佔一行
範例輸入
4[]([])[]((]([)]
範例輸出
0032
分析:dp[i][j]——從i到j需要添加的括弧數,枚舉i到j距離m( 1 ~ (len-1) )當s[i]和s[j]匹配時: dp[i][j]=min( dp[i][j] ,dp[i+1][j-1] ) ,  dp[i][j]=min( dp[i][j], dp[i][k]+dp[k+1][j] ) 代碼:
#include <stdio.h>#include <string.h>int min(int x, int y){if (x > y) return y;return x;}int dp[150][150];int main(){int n, m, i, j, k;char s[101];scanf("%d", &n);while (n--){scanf("%s", s);int len = strlen(s);memset(dp, 0, sizeof(dp));for (i = 0; i < len; i++)dp[i][i] = 1;          // 一個字元匹配數為1for (m = 1; m < len; m++){for (i = 0; i < len - m; i++){j = i + m;dp[i][j] = 150;if ((s[i] == '('&&s[j] == ')') || (s[i] == '['&&s[j] == ']'))dp[i][j] = min(dp[i][j], dp[i + 1][j - 1]);for (k = i; k < j; k++)dp[i][j] = min(dp[i][j], dp[i][k] + dp[k + 1][j]);}}printf("%d\n", dp[0][len - 1]);}return 0;}







NYOJ括弧匹配的測試資料,實在想不到程式什地方有問題

這是其中括弧匹配的函數部分:void match(SeqStack S,char *str)&#47;&#47;括弧的比較{int i;char ch;for(i = 0; str[i] != &#39;&#92;0&#39;; i++){switch(str[i]){case &#39;(&#39;:case &#39;[&#39;:case &#39;{&#39;:Push(&amp;S73str[i]);break;case &#39;)&#39;:case &#39;]&#39;:case &#39;}&#39;:if(GetTop(&amp;S)==&#39;#&#39;){printf(&quot;&#92;n -_-!!!   右括弧多餘!&#92;n&quot;);exit (0);}else{ch=GetTop(&amp;S);if(Compare(ch,str[i]))Pop(&amp;S);else{printf(&quot;&#92;n -_-!!!   對應的左右括弧不同類!&#92;n&quot;);exit (0);}}}}if(GetTop(&amp;S)==&#39;#&#39;)printf(&quot;&#92;n ^_^   括弧匹配!   ^_^&#92;n&quot;);else{printf(&quot;&#92;n -_-!!!   左括弧多餘!&#92;n&quot;);exit (0);}}
 
【ACM問題】南陽理工學院線上評測 問題15 括弧匹配(二)

我大致測試了一下
這個)[)(]( 這個例子,你的答案是6,但是最少只有4個,說明你還是沒考慮完全

還有一個問題就是你要把結果儲存到一個數組裡面,最後一次性輸出來
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.