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

    n<=10000,n*2的格子玩扫雷,给下面一行的数字,问上面一行有几种方案。

    ????我写的DP,貌似有更简洁的写法。。

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<algorithm>
     4 #include<stdlib.h>
     5 //#include<iostream>
     6 //#include<time.h>
     7 using namespace std;
     8 
     9 int n;
    10 #define maxn 10011
    11 int f[maxn][5][5],a[maxn];
    12 int main()
    13 {
    14     scanf("%d",&n);
    15     int tmp=0;
    16     for (int i=1;i<=n;i++) scanf("%d",&a[i]),tmp=max(tmp,a[i]);
    17     if (tmp>=4) {puts("0");return 0;}
    18     if (n==1) {if (a[1]==1) puts("1");else puts("0");return 0;}
    19     f[1][a[2]][a[1]]=1;
    20     if (a[2]>0 && a[1]>0) f[1][a[2]-1][a[1]-1]=1;
    21     a[n+1]=3;
    22     for (int i=2;i<=n;i++)
    23         for (int j=0;j<=a[i];j++)
    24         {
    25             f[i][a[i+1]][j]=f[i-1][j][0];
    26             if (a[i+1]>0) f[i][a[i+1]-1][j]=f[i-1][j+1][1];
    27         }
    28 //    for (int i=1;i<=n;i++)
    29 //        for (int j=0;j<=4;j++)
    30 //            for (int k=0;k<=4;k++)
    31 //                cout<<i<<' '<<j<<' '<<k<<' '<<f[i][j][k]<<endl;
    32     printf("%d
    ",f[n][a[n+1]-1][0]+f[n][a[n+1]][0]);
    33     return 0;
    34 }
    View Code
  • 相关阅读:
    poj1275收银员——差分约束
    poj3565Ants——KM算法
    bzoj2750Road——最短路计数
    poj1236学校网络——连通块
    poj2226Muddy Fields——二分图匹配
    Pots
    蜘蛛牌
    Find The Multiple (水题)
    Dungeon Master (三维bfs)
    棋盘问题 (简单搜索)
  • 原文地址:https://www.cnblogs.com/Blue233333/p/7986372.html
Copyright © 2011-2022 走看看