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; }