zoukankan      html  css  js  c++  java
  • NOIP模拟 mine DP

    题面不给……题意:找出合法字符串填法。

    明显是个思博线性递推这都推不出来简直智硬$O(n)$搞啊……

    但是细节成功绝杀……考虑字符为$1$时,需要分开考虑地雷在前在后的情况……

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <algorithm>
     5 using namespace std;
     6 const int maxn=(int)1e6+5,mod=(int)1e9+7;
     7 char s[maxn];int f[maxn][5];//0 0 1 2 2 * 3 1* 4 *1
     8 int haha()
     9 {
    10     scanf("%s",s+1);int n=strlen(s+1);
    11     if(s[1]=='?')f[1][0]=f[1][2]=f[1][3]=1;
    12     else if(s[1]=='0')f[1][0]=1;
    13     else if(s[1]=='1')f[1][3]=1;
    14     else f[1][2]=1;
    15     for(int i=2;i<=n;i++)
    16     {
    17         if(s[i]=='*')f[i][2]=((f[i-1][3]+f[i-1][2])%mod+f[i-1][1])%mod;
    18         else if(s[i]=='0')f[i][0]=(f[i-1][4]+f[i-1][0])%mod;
    19         else if(s[i]=='2')f[i][1]=f[i-1][2];
    20         else if(s[i]=='1')f[i][3]=(f[i-1][4]+f[i-1][0])%mod,
    21                             f[i][4]=f[i-1][2];
    22         else
    23         {
    24             f[i][0]=(f[i-1][4]+f[i-1][0])%mod;
    25             f[i][1]=f[i-1][2];
    26             f[i][2]=((f[i-1][3]+f[i-1][2])%mod+f[i-1][1])%mod;
    27             f[i][3]=(f[i-1][4]+f[i-1][0])%mod;
    28             f[i][4]=f[i-1][2];
    29         }
    30     }
    31     printf("%d
    ",((f[n][0]+f[n][2])%mod+f[n][4])%mod);
    32 }
    33 int sb=haha();
    34 int main(){;}
    A
  • 相关阅读:
    C语言位运算详解(转载)
    C/C++知识点
    android获取string.xml的值(转)
    C++ Primer与c++编程思想的比较(转)
    C++ 学习的网站
    C++学习网站总结(转)
    C++学习网站(转)
    C++编程学习50个经典网站 强力推荐 (转)
    JAVA反射机制(转)
    AxureRP7.0教学大纲Tutorial directory
  • 原文地址:https://www.cnblogs.com/Loser-of-Life/p/7624529.html
Copyright © 2011-2022 走看看