zoukankan      html  css  js  c++  java
  • JZOJ5804. 【2018.08.12提高A组模拟】简单的序列

    性质:每个位置的前缀和必须大于0,总和=0.以此dp即可。

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    using namespace std;
    const int mod=1e9+7;
    int n,m,f[2005][2005],ans,sum,mn=0x3f3f3f3f;
    char s[100005];
    int main() {
    	freopen("bracket.in","r",stdin);
    	freopen("bracket.out","w",stdout);
    	scanf("%d%d%s",&n,&m,s+1);
    	for(int i=1;i<=m;i++) {if(s[i]=='(') sum++;else sum--;mn=min(mn,sum);}
    	f[0][0]=1;
    	for(int i=1;i<=n-m;i++) {
    		for(int j=0;j<=i;j++) {
    			if(j)(f[i][j]+=f[i-1][j-1])%=mod;
    			if(j<i-1)(f[i][j]+=f[i-1][j+1])%=mod;
    		}
    	}
    	for(int i=-mn;i<=n-m;i++) {
    		for(int j=-mn;j<=i;j++) {
    			if(sum+j<=m+n-i)
    			ans=(ans+1ll*f[i][j]*f[n-m-i][j+sum])%mod;
    		}
    	}
    	cout<<ans;
    }
    
    我是咸鱼。转载博客请征得博主同意Orz
  • 相关阅读:
    探索需求14
    周总结5
    周总结4
    探索需求13
    Java——迭代器
    Java——Collection集合
    Java——包装类
    Java——Arrays
    Java——BigInteger、BigDecimal
    Java——System
  • 原文地址:https://www.cnblogs.com/sdfzhsz/p/9464384.html
Copyright © 2011-2022 走看看