1. 程式人生 > >poj3991(括號匹配-貪心)

poj3991(括號匹配-貪心)

題意:給一個長度為偶數的括號序列,問至少要改變多少個可以使得此括號序列合法;

解法:貪心的思想,遍歷過程中如果字首中有右括號沒有匹配那麼此右括號一定要變成左括號,如果右括號左邊有沒有匹配的左括號,則一定可以找左邊最近的那個左括號匹配上。最後再加上剩餘左括號數量的一半;

程式碼:

/****************************************************
* author:xiefubao
*******************************************************/
#pragma comment(linker, "/STACK:102400000,102400000")
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <queue>
#include <vector>
#include <algorithm>
#include <cmath>
#include <map>
#include <set>
#include <stack>
#include <string.h>

using namespace std;

#define eps 1e-8
typedef long long LL;


char s[3000];
char stacks[3000];
int p=0;
int len=0;

int main()
{
    int t=0;cin>>t;
    int a=0;
  while(scanf("%s",s)==1)
  {
      if(s[0]=='-')
        break;
      a++;
        p=0;
      int len=strlen(s);
      int ans=0;
      int left=0;
      for(int i=0;i<len;i++)
      {
          if(s[i]=='{')
            left++;
          else
          {
              if(left>0)
                left--;
              else
                ans++,left=1;
          }
      }
      ans+=left/2;
      printf("%d. %d\n",a,ans);
  }
   return 0;
}
/*
[()][]([)[)
([)](])[
*/