• bzoj P1088


    这道题看似是一道dp,但是实则不是,而是一道很水的题。。。

    对于我这种扫雷的老玩家,都知道扫雷其实是推理游戏。。

    设第二列第i项为f[i],则f[i]依赖于a[i-1]和a[i]和a[i+1]。。

    所以可以暴力判断一下f[1]的值:

    f[1]=0:a[1]=0,a[2]=0;

    f[1]=2:a[1]=1,a[2]=1;

    f[1]=1:有两种情况:

    1、a[1]=0,a[2]=1;

    2、a[1]=1,a[2]=0;

    于是,写一个check函数,检查一下枚举的正确性,输出就行了。。

    #include<bits/stdc++.h>

    using
    namespace std;
    int ans,n,f[10010],a[10010];
    int solve(){
    for(int i=3;i<=n;i++){
    a[i]
    =f[i-1]-a[i-1]-a[i-2];
    if(a[i]>1||a[i]<0)return 0;
    }
    if(f[n]!=a[n-1]+a[n]) return 0;
    return 1;
    }
    int main(){
    scanf(
    "%d",&n);
    for(int i=1;i<=n;i++)scanf("%d",&f[i]);
    if(f[1]==2) a[1]=1,a[2]=1,ans=solve();
    else if(f[1]!=0){
    a[
    1]=0;a[2]=1;ans=solve();
    a[
    1]=1;a[2]=0;ans+=solve();
    }
    else ans=solve();
    printf(
    "%d",ans);
    return 0;
    }
  • 相关阅读:
    tcl tk lappend
    file join
    [转载]强指针和弱指针
    DisplayHardware
    Android 十大调试方法
    C语言程序的外部变量与函数
    DisplayHardware
    Android 十大调试方法
    wifi连接流程分析
    [转载]强指针和弱指针
  • 原文地址:https://www.cnblogs.com/heqingyu/p/7683367.html
Copyright © 2020-2023  润新知