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 }
  • 相关阅读:
    LabVIEW-水仙花数
    NRF51822自学笔记(一) 流水灯
    机器学习第四次作业
    4.K均值算法--应用
    机器学习第三次
    机器学习第二次专业
    算符优先分析
    自下而上语法分析
    递归下降语法分析
    LL(1)文法的判断,递归下降分析程序
  • 原文地址:https://www.cnblogs.com/kirai/p/5467553.html
Copyright © 2011-2022 走看看