bzoj 1088 DP

  我们可以用w[i][s]来表示到第i位的方案,s代表第i位和第i+1位是否有雷的二进制串,那么我们就可以根据每一位的雷的数量转移了。

 

/**************************************************************
    Problem: 1088
    User: BLADEVIL
    Language: C++
    Result: Accepted
    Time:20 ms
    Memory:1588 kb
****************************************************************/
 
//By BLADEVIL
#include <cstdio>
#define maxn 10010
 
using namespace std;
 
int n;
int w[maxn][20];
 
int main()
{
    scanf("%d",&n);
    int x; scanf("%d",&x);
    if (x==2) w[1][3]++; else
    if (!x) w[1][0]++; else
        w[1][1]=w[1][2]=1;
    for (int i=2;i<=n;i++)
    {
        scanf("%d",&x);
        if (x==3) w[i][3]=w[i-1][3]; else
        if (!x) w[i][0]=w[i-1][0]; else
        if (x==2) w[i][2]=w[i-1][3],w[i][1]=w[i-1][2],w[i][3]=w[i-1][1]; else
        if (x==1) w[i][2]=w[i-1][1],w[i][1]=w[i-1][0],w[i][0]=w[i-1][2];
    }
    printf("%d\n",w[n][2]+w[n][0]);
    return 0;
}

 

posted on 2014-02-17 10:24  BLADEVIL  阅读(235)  评论(0编辑  收藏  举报