P2327 [SCOI2005]扫雷

Posted xmex

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P2327 [SCOI2005]扫雷相关的知识,希望对你有一定的参考价值。

Question

题目传送门

Solution

做完之后看题解,发现各位大仙递归就完事了
然而我还在挨个判断每种状态
首先我们看一看题目有四种情况
然后我们开一个三维数组f[i][j][k]
f[i][j][k]表示当前位置i是否是雷(也就是j)
下一位置要不要是雷的方案数k
我们有了它就可以为所欲为
判断下一位置的状态,看上一状态就好了
最后我们累加方案数就行了

Code

#include<bits/stdc++.h>
using namespace std;
const int N = 11000;
int n,g[N];
int f[N][2][2];
inline int read(){
    int num=0,f=1;char c=getchar();
    for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;
    for(;isdigit(c);c=getchar()) num=num*10+c-'0';
    return num*f;
}
int main(){
    f[0][0][0]=f[0][0][1]=1;
    n=read();
    for(int i=1;i<=n;++i) g[i]=read();
    for(int i=1;i<=n;++i){
        if(g[i]==0) f[i][0][0]+=f[i-1][0][0];
        if(g[i]==1){
            f[i][0][1]+=f[i-1][0][0];
            f[i][0][0]+=f[i-1][1][0];
            f[i][1][0]+=f[i-1][0][1];
        }
        if(g[i]==2){
            f[i][1][1]+=f[i-1][0][1];
            f[i][1][0]+=f[i-1][1][1];
            f[i][0][1]+=f[i-1][1][0];
        }
        if(g[i]==3) f[i][1][1]+=f[i-1][1][1];
    }
    printf("%d",f[n][0][0]+f[n][1][0]);
    return 0;
}

以上是关于P2327 [SCOI2005]扫雷的主要内容,如果未能解决你的问题,请参考以下文章

P2327 [SCOI2005]扫雷

洛谷P2327 [SCOI2005]扫雷 枚举 搜索

P2327 [SCOI2005]扫雷 [2017年5月计划 清北学堂51精英班Day1]

luogu P2327 [SCOI2005]扫雷

P2327 [SCOI2005]扫雷

P2327 [SCOI2005]扫雷