首页 > 其他分享 >做题记录整理dp13 P7914 [CSP-S 2021] 括号序列(2022/9/26)

做题记录整理dp13 P7914 [CSP-S 2021] 括号序列(2022/9/26)

时间:2022-09-27 17:01:00浏览次数:80  
标签:md 26 P7914 括号 2021 dp13 CSP dp

P7914 [CSP-S 2021] 括号序列
非常考思维的思维题(甚至做到了让全广西都恐惧(似乎广西连拿暴力分的人都没有))
由于看了题解,所以这题相当于是在巨人的肩膀上做题了。。。
而且这位大佬的代码风格和我非常像,导致我打完发现和抄题解似的。。。

#include<bits/stdc++.h>
#define for1(i,a,b) for(ll i = a;i<=b;i++)
#define ll long long
#define mp(a,b) make_pair(a,b)
using namespace std;
ll n,k,dp[505][505][10];
const ll md=1e9+7;
string s;
//0:形态如***...*的括号序列(即全部是*)。
// 1: 形态如(...)的括号序列(即左右直接被括号包裹且最左边括号与最右边的括号相互匹配)。
// 2: 形态如(...)**(...)***的括号序列(即左边以括号序列开头,右边以*结尾)。
// 3: 形态如(...)***(...)*(...)的括号序列(即左边以括号序列开头,右边以括号序列结尾,注意:第2种形态也属于这种形态)。
// 4: 形态如***(...)**(...)的括号序列(即左边以*开头,右边以括号序列结尾)。
// 5: 形态如***(...)**(...)**的括号序列(即左边以*开头,右边以*结尾,注意:第1种形态也属于这种形态)。
bool cl(ll a,ll b) 
{
     return (s[a]=='('||s[a]=='?')&&(s[b]==')'||s[b]=='?');
}
int main(){
    scanf("%d%d\n",&n,&k);
    getline(cin,s);
    s.insert(0," ");
    for1(i,1,n) dp[i][i-1][0]=1;
    for1(len,1,n)
        for1(l,1,n-len+1)
		{
            int r=l+len-1;
            
            if(len<=k) dp[l][r][0]=dp[l][r-1][0]&&(s[r]=='*'||s[r]=='?');
            
            if(len>=2)
			{
                if(cl(l,r)) dp[l][r][1]=(dp[l+1][r-1][0]+dp[l+1][r-1][2]+dp[l+1][r-1][3]+dp[l+1][r-1][4])%md;
                for1(i,l,r-1)
				{
                    dp[l][r][2]=(dp[l][r][2]+dp[l][i][3]*dp[i+1][r][0])%md;
                    dp[l][r][3]=(dp[l][r][3]+(dp[l][i][2]+dp[l][i][3])*dp[i+1][r][1])%md;
                    dp[l][r][4]=(dp[l][r][4]+(dp[l][i][4]+dp[l][i][5])*dp[i+1][r][1])%md;
                    dp[l][r][5]=(dp[l][r][5]+dp[l][i][4]*dp[i+1][r][0])%md;
                }
            }
			dp[l][r][3]=(dp[l][r][3]+dp[l][r][1])%md;
            dp[l][r][5]=(dp[l][r][5]+dp[l][r][0])%md;
        }
    printf("%lld\n",dp[1][n][3]);
    return 0;
}

标签:md,26,P7914,括号,2021,dp13,CSP,dp
From: https://www.cnblogs.com/yyx525jia/p/16735148.html

相关文章

  • 2022-2023-1 20211326《信息安全专业导论》第五周学习总结
    作业信息信息安全专业导论第四周作业:|无穷的技艺作业||我的黑客偶像|正文链接:https://www.cnblogs.com/TonySSS/教材学习内容总结|看漫画学Python第五章|学习了分支......
  • 【2022-09-26】人精鬼灵
    22:00活着的唯一方式就是让别人活着。                                        ......
  • 20220926(中!)
    20220926(中!)t1扩散思路​ 这道题思路很多,这里只浅谈一下最小生成树的做法。显然,每个点每次扩散时,都会使得它到其他点的曼哈顿距离减少1。那么我们要求所有点形成一个......
  • lc_top_0926
    lc15三数之和classSolution{publicList<List<Integer>>threeSum(int[]nums){List<List<Integer>>ans=newArrayList<>();Arrays.sort(n......
  • 9.26 小记
    我今天没干啥,就做poi的题了不写了,没啥好写的如果说所有悲欢都将在喧嚣中淹没总有人与我不期而遇在迷茫的路口为我再次寻回遗失在角落的梦为世界带来久违的温柔风的......
  • 【2022.9.26】drf(2)
    今日学习内容1APIView基本使用1.1使用View+JsonResponse写1.2使用APIView+drf的Response写(不要忘了注册rest_framework这个app)2APIView源码分析3Requ......
  • 做题记录整理dp13 P5664 [CSP-S2019] Emiya 家今天的饭(2022/9/26)
    P5664[CSP-S2019]Emiya家今天的饭终于遇到一个我感觉在考场上有可做出来的题了。。。唯一想不到的就是最开始的容斥(也就是说还是看了题解。。。),如果容斥想到的话其他......
  • 【2022-09-26】DRF从入门到入土(二)
    DRF从入门到入土(二)一、APIView基本使用使用view+JsonResponse获取所有图书接口安装drf:pip3installdjangorestframeworksettings.py注册app:'rest_framework......
  • 做题记录整理dp12 P7961 [NOIP2021] 数列(2022/9/26)
    P7961[NOIP2021]数列当时在考场上对于拿部分分这个感念不是很清晰,所以当时连暴力分都没拿。。。事实上这题在看了题解之后还是有很多地方没搞明白,比如最后统计答案,为什......
  • Test 2022.09.26
    今天是水题专场T1扩散感觉这种要么就是二分答案网络流,要么就是最小生成树,(随便口胡的),树德保留节目了属于是。分析简简单单一眼最小生成树(又是),边权就是两个点之间存在公......