zoukankan      html  css  js  c++  java
  • [HIHO1300]展胜地的鲤鱼旗(栈,dp)

    题目链接:http://hihocoder.com/problemset/problem/1300

    给一个字符串,只包含'('和')',问存在多少个子串似的括号是匹配的。

    匹配规则在题干中描(蒻)(语)(文)非常烂!

    维护一个栈,栈中保存'('的下标。当遇到')'并且栈非空的时候,说明已经匹配到一对括号。取出栈顶'('的位置idx。并且记录此时状态,dp(i)=dp(idx-1)+1。

     1 #include <algorithm>
     2 #include <iostream>
     3 #include <iomanip>
     4 #include <cstring>
     5 #include <climits>
     6 #include <complex>
     7 #include <fstream>
     8 #include <cassert>
     9 #include <cstdio>
    10 #include <bitset>
    11 #include <vector>
    12 #include <deque>
    13 #include <queue>
    14 #include <stack>
    15 #include <ctime>
    16 #include <set>
    17 #include <map>
    18 #include <cmath>
    19 
    20 using namespace std;
    21 
    22 //kirai maxn
    23 const int maxn = 1000010;
    24 int n;
    25 int st[maxn], top;
    26 int dp[maxn];
    27 char str[maxn];
    28 
    29 int main() {
    30     // freopen("in", "r", stdin);
    31     while(~scanf("%s", str)) {
    32         top = 0;
    33         n = strlen(str);
    34         memset(dp, 0, sizeof(dp));
    35         for(int i = 0; i < n; i++) {
    36             if(str[i] == '(') st[top++] = i;
    37             else {
    38                 if(top > 0) {
    39                     int idx = st[--top];
    40                     dp[i] = 1 + dp[idx-1];
    41                 }
    42             }
    43         }
    44         int ans = 0;
    45         for(int i = 0; i < n; i++) {
    46             printf("%d ", dp[i]);
    47             ans += dp[i];
    48         }
    49         printf("%d
    ", ans);
    50     }
    51     return 0;
    52 }
  • 相关阅读:
    Win7 on VirtualBox 看不到 usb device
    framebuffer line_length 參數
    booting logo & booting animation
    charing animation
    vim
    [筆記] Ubuntu Linux 使用 apt-get 指令移除軟體並清理遺留的垃圾
    git 指令
    adb devices 偵測不到 手機
    apt-get 相關設定
    Ubuntu 14 設定 遠端連線,讓別台電腦可以連線進來
  • 原文地址:https://www.cnblogs.com/kirai/p/5467553.html
Copyright © 2011-2022 走看看