zoukankan      html  css  js  c++  java
  • P2327 [SCOI2005]扫雷

    (b[i])表示第(i)个行第一列是否有雷,即(b[i])的值只能为(0)(1)

    一旦第(i-1)行第一列的摆放情况确定,因为要满足(8)连通的格子里的数字限制,第(i)行第一列的摆放情况也随之确定。

    递推式:

    [b[i] = a[i-1] - b[i-1] - b[i-2] ]

    (a[i-1])表示第(i-1)行第二列的数字。

    分别令(b[1]=0)(b[1]=1)即可递推出(b[2 sim n])

    注意点

    要判断(b[n-1]+b[n])是否等于(a[n])

    const int N=10010;
    int a[N],b[N];
    int n;
    int ans;
    
    bool check()
    {
        for (int i = 2; i <= n; i++)
        {
            b[i] = a[i-1] - b[i-1] - b[i-2];
            if(b[i] < 0 || b[i] > 1) return false;
        }
        if (b[n-1] + b[n] != a[n]) return false;
        
        return true;
    }
    
    int main()
    {
        cin >> n;
        for (int i = 1; i <= n; i++) cin >> a[i];
    
        b[1] = 1;  // 左边第一格有雷
        if (check()) ans++;
        b[1] = 0;  // 左边第一格没雷
        if (check()) ans++;
    
        cout << ans << endl;
        //system("pause");
        return 0;
    }
    
  • 相关阅读:
    C# 数据库连接字符串拼接
    C# 线程同步计数存在的问题
    字符串操作
    字符串位置
    6个基本函数
    占位符
    str转换成int
    python运算符6
    python运算符5
    python运算符4
  • 原文地址:https://www.cnblogs.com/fxh0707/p/14771273.html
Copyright © 2011-2022 走看看