zoukankan      html  css  js  c++  java
  • AtCoder Regular Contest 059 F Unhappy Hacking

    Description


    题面

    Solution

    我们发现如果一个位置需要被退掉,那么是 (0)(1) 都没有关系
    于是我们想到把 (0,1) 归为一类
    问题转化为每一次可以添加和删除一个 (?),求 (n) 次操作后最后长度变为 (|S|) 的方案数
    我们最后可以把 (?) 对应成 (S),只需要把方案数除以一个 (2^{|S|}) 就行了

    #include<bits/stdc++.h>
    using namespace std;
    const int N=5005,mod=1e9+7;
    int n,f[N][N],m;char s[N];
    int main(){
      freopen("pp.in","r",stdin);
      freopen("pp.out","w",stdout);
      scanf("%d%s",&n,s+1);m=strlen(s+1);
      f[0][0]=1;
      for(int i=0;i<n;i++)
    	  for(int j=0;j<=i;j++){
    		  if(j)f[i+1][j-1]=(f[i+1][j-1]+f[i][j])%mod;
    		  else f[i+1][j]=(f[i+1][j]+f[i][j])%mod;
    		  f[i+1][j+1]=(f[i+1][j+1]+1ll*f[i][j]*2)%mod;
    	  }
      for(int i=1;i<=m;i++)f[n][m]=1ll*f[n][m]*500000004%mod;
      printf("%d
    ",f[n][m]);
      return 0;
    }
    
    
  • 相关阅读:
    知识体系总结
    计算机基础总结
    Redis总结
    Mysql总结
    JAVA基础总结
    有锁编程
    CAS
    读写自旋锁
    org.apache.log4j.Logger详解
    web.xml 中的listener、 filter、servlet 加载顺序及其详解
  • 原文地址:https://www.cnblogs.com/Yuzao/p/8716154.html
Copyright © 2011-2022 走看看