首页 > 其他分享 >HDU 5479 Scaena Felix(DP)

HDU 5479 Scaena Felix(DP)

时间:2023-04-07 11:00:59浏览次数:34  
标签:HDU Scaena min int Felix str test include dp


题目大意:给出一系列的由’(‘和’)’ 组成的字符串,现有一种操作,可以将括号的方向变反,但需要花费1
现在问,需要花费多少的代价才能使该字符串的任意一个连续子串都不存在”()”的配对

解题思路:用dp[i][0]表示第i个位置变成’(‘的代价,dp[i][1]表示第i个位置变成’)’的代价
如果当前字符是’(‘的话,
dp[i][0] = min(dp[i - 1][1], dp[i - 1][0])
dp[i][1] = dp[i - 1][1] + 1
如果当前字符是’)’的话
dp[i][1] = dp[i - 1][1]
dp[i][0] = min(dp[i - 1][1], dp[i - 1][0]) + 1

#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int N = 1010;

char str[N];
int dp[N][2];

int main() {
    int test;
    scanf("%d", &test);
    while (test--) {
        scanf("%s", str + 1);
        int len = strlen(str + 1);
        memset(dp, 0, sizeof(dp));
        if (str[1] == '(') {
            dp[1][0] = 0;
            dp[1][1] = 1;
        }
        else  {
            dp[1][0] = 1;
            dp[1][1] = 0;
        }

        for (int i = 2; i <= len; i++) {
            if (str[i] == '(') {
                dp[i][0] = min(dp[i - 1][0], dp[i - 1][1]);
                dp[i][1] = dp[i - 1][1] + 1;
            }
            else {
                dp[i][1] = dp[i - 1][1];
                dp[i][0] = min(dp[i - 1][0], dp[i - 1][1]) + 1;
            }
        }
        printf("%d\n", min(dp[len][0], dp[len][1]));
    }
    return 0;
}


标签:HDU,Scaena,min,int,Felix,str,test,include,dp
From: https://blog.51cto.com/u_10970600/6175581

相关文章

  • hdu-5306(区间最值+线段树)
    hduGorgeousSequenceHDU-5306题意:给定一个长度为n的区间,做m次操作,三种操作对于序列[L,R]区间中的每个ai,用min(ai,x)替换。打印序列[L,R]区间的最大值打印序列[L,R]区间和因为区间和与区间最值无关,所以无法直接用简单的标记处理。区间最值与区间和如何扯上关系呢?我......
  • HDU 2196 Computer(树形DP) 入门模板
    ComputerTimeLimit:1000/1000MS(Java/Others)    MemoryLimit:32768/32768K(Java/Others)TotalSubmission(s):34313    AcceptedSubmission(s):5345 ProblemDescriptionAschoolboughtthefirstcomputersometimeago(sothiscomputer'sidis1).D......
  • HDU动态规划题解目录
    ProblemA:MaxSum(HDU1003)   点击这里ProblemB:CommonSubsequence(HDU1159)    点击这里ProblemC:SuperJumping!Jumping!Jumping!(HDU1087)    点击这里ProblemD:HumbleNumbers(HDU1058)   点击这里ProblemE:MonkeyandBanana(HDU1069)    点击这里ProblemF:......
  • hdu - 4578(线段树)
    题目:Yuanfangispuzzledwiththequestionbelow:Therearenintegers,a1,a2,…,an.Theinitialvaluesofthemare0.Therearefourkindsofoperations.Operation1:Addctoeachnumberbetweenaxandayinclusive.Inotherwords,dotransformationak&......
  • HDU 3328 Flipper 栈的应用
    FlipperTimeLimit:2000/1000MS(Java/Others)    MemoryLimit:32768/32768K(Java/Others)TotalSubmission(s):521    AcceptedSubmission(s):334ProblemDescriptionLittleBobbyRoberts(sonofBigBob,ofProblemG)playsthissolitairememory......
  • hdu3595 GG and MM Every SG博弈
    这是一道很神奇的题,神奇的地方在于全网这个模型只有这题什么是EverySG?不同于普通的ICG,它由多个游戏同时进行,且必须同时进行比如这道题,要求先手一次对所有石头堆都要操作显然对于单独的每种情况,我们都可以求出这是必败态还是必胜态现在摆在我们眼前的就有一堆游戏,对于每个游......
  • hdu3980 Paint Chain SG函数+SG定理+记忆化搜索
    liyishui今天学习博弈,因为liyishui今天写树链剖分写得有点理智--题意:有一个圆,上面有n个豆子,每次要挑出连续m个没染色的豆子进行染色,不能移动时输掉游戏问先手必胜还是后手必胜,其中n、m<=1000题解:会很朴素地想到如果第一个人拿走了m个,那么剩下的就是一条链的问题。所以可以先......
  • 确定比赛名次 HDU - 1285 (拓扑排序)
    题意:有N个比赛队(1≤N≤500),编号依次为1,2,3,...,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委员会不能直接获得每个队的比赛成绩,只知道每场比......
  • Transformation HDU - 4578
    题目链接\(1\)题目链接\(2\)题解设一个区间的和、平方和、立方和分别是\(sum_0,sum_1,sum_2\)对于\(add\)操作,推推公式可知\(\begin{cases}newsum_2=sum_2+val^3......
  • hdu-4630(树状数组)
    题目:Lifeisagame,andyouloseit,soyousuicide.Butyoucannotkillyourselfbeforeyousolvethisproblem:Givenyouasequenceofnumbera1,a2,...,an.T......