zoukankan      html  css  js  c++  java
  • bzoj1088: [SCOI2005]扫雷Mine(DP)

    1088: [SCOI2005]扫雷Mine

    题目:传送门 

    题解:

       一道DP(玩过扫雷的资深玩家肯定一眼秒%%%)

       其实定义一个F数组表示1~i的数目就OK。

       前两个格子完全可以与处理出来,后面的for一次就搞定了

       水了一题...

     

    代码:

      

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<cstdlib>
     4 #include<cmath>
     5 #include<algorithm>
     6 #define qread(x) x=read()
     7 using namespace std;
     8 inline int read()
     9 {
    10     int f=1,x=0;char ch;
    11     while(ch<'0' || ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    12     while(ch>='0' && ch<='9'){x=x*10+ch-'0';ch=getchar();}
    13     return f*x;
    14 }
    15 int a[11000];
    16 int f[11000],n;
    17 int solve()
    18 {
    19     for(int i=2;i<n;i++)
    20     {
    21         int t=a[i]-f[i]-f[i-1];
    22         if(t<0 || t>1)return 0;
    23         else f[i+1]=t;
    24     }
    25     if(f[n]+f[n-1]!=a[n])return 0;
    26     return 1;
    27 }
    28 int main()
    29 {
    30     int ans=0;
    31     memset(f,0,sizeof(f));
    32     qread(n);
    33     for(int i=1;i<=n;i++)qread(a[i]);
    34     if(a[1]>2){printf("0
    ");return 0;}
    35     if(a[n]>2){printf("0
    ");return 0;}
    36     if(a[1]==2)
    37     {
    38         f[1]=1;f[2]=1;
    39         ans+=solve();
    40     }
    41     if(a[1]==1)
    42     {
    43         memset(f,0,sizeof(f));
    44         f[1]=1;
    45         ans+=solve();
    46         memset(f,0,sizeof(f));
    47         f[2]=1;
    48         ans+=solve();
    49     }
    50     if(a[1]==0)
    51         memset(f,0,sizeof(f)),ans+=solve();
    52     printf("%d
    ",ans);
    53     return 0;
    54 }
  • 相关阅读:
    PHP乘法表
    通过闭包可以返回局部变量
    FZU2125_简单的等式
    FZU2122_又见LKity
    FZU2121_神庙逃亡
    UVA12585_Poker End Games
    UVA12583_Memory Overow
    HDU4647_Another Graph Game
    HDU4646_Laser Beam
    HDU4787_GRE Words Revenge
  • 原文地址:https://www.cnblogs.com/CHerish_OI/p/8137466.html
Copyright © 2011-2022 走看看