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

    题目描述

    输入输出格式

    输入格式:

    第一行为N,第二行有N个数,依次为第二列的格子中的数。(1<= N <= 10000)

    输出格式:

    一个数,即第一列中雷的摆放方案数。

    输入输出样例

    输入样例#1:
    2
    1  1
    输出样例#1:
    2

    这题神套路..答案只有三种0,1,2
    因为只要第一个的状态确定了之后,后面的要么无解,要么只有一种解.
    因为每个点要么有雷要么无雷.
    所以就可以先枚举第一个点是否有雷,然后DP判断是否有解.
    每个点的雷数f[i]=a[i-1]-f[i-1]-f[i-2].
    若算出来不是01就无解了.

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstdlib>
     4 #include<cstring>
     5 #include<string>
     6 #include<algorithm>
     7 #include<map>
     8 #include<complex>
     9 #include<queue>
    10 #include<stack>
    11 #include<cmath>
    12 #include<set>
    13 #include<vector>
    14 #define maxn 10010
    15 using namespace std;
    16 int f[maxn],a[maxn],n;
    17 inline bool check(){
    18   for(int i=2;i<=n;i++){
    19     f[i]=a[i-1]-f[i-1]-f[i-2];
    20     if(f[i]!=0 && f[i]!=1) return 0;
    21   }
    22   if(f[n]+f[n-1]!=a[n]) return 0;
    23   return 1;
    24 }
    25 int main(){
    26   int ans=0;
    27   scanf("%d",&n);
    28   for(int i=1;i<=n;i++)
    29     scanf("%d",&a[i]);
    30   f[1]=0;
    31   if(check())ans++;
    32   memset(f,0,sizeof(f));
    33   f[1]=1;
    34   if(check())ans++;
    35   printf("%d",ans);
    36   return 0;
    37 }
  • 相关阅读:
    [svc]frp内网穿透
    [svc]caffe安装笔记
    [na]icmp重定向
    [tools]python的mkdocs模块分分钟将md搞成一个网站
    [svc]samba服务搭建
    [ci] jenkins的Timestamper插件-让日志显示时间
    [k8s]subpath解决cm覆盖目录问题
    struts2+jquery+ajax实现上传&&校验实例
    java String.split方法是用注意点(转)
    loadrunner java协议脚本要点
  • 原文地址:https://www.cnblogs.com/pantakill/p/7502684.html
Copyright © 2011-2022 走看看