怎么会错啊??

P2327 [SCOI2005] 扫雷

解决了,顺便提供一组样例, ``` 4 1 1 1 1 ```` 输出 ``` 1 ``` 代码 ``` #include<iostream> #include<cstdio> #include<cmath> #include<cmath> #include<cstring> #include<vector> #include<string> #include<queue> #include<algorithm> #include<map> #include<set> #include<stack> using namespace std; inline int read() { int f=1,x=0; char ch=getchar(); while(ch<'0'||ch>'9') { if(ch=='-')f=-1; ch=getchar(); } while(ch>='0'&&ch<='9') { x=x*10+ch-'0'; ch=getchar(); } return f*x; } int n,a[10100]; int dp[10100][2][2]; void dfs(int x) { if(a[x-1]==0) { if(a[x]==0) { dp[x][0][0]=dp[x-1][0][0]; } else if(a[x]==1) { dp[x][0][0]=dp[x-1][0][0]; } else { printf("0"); exit(0); } } if(a[x-1]==1&&a[x]==1) { dp[x][0][1]=dp[x-1][0][0]; dp[x][1][0]=dp[x-1][0][1]; dp[x][0][0]=dp[x-1][1][0];//修改 } else if(a[x-1]==1) { if(a[x]==3) { printf("0"); exit(0); } if(a[x]==2) { dp[x][0][1]=dp[x-1][0][0]; dp[x][1][0]=dp[x-1][0][1]; } if(a[x]==0) { dp[x][0][0]=dp[x-1][1][0]; } } else if(a[x-1]==2) { if(a[x]==0) { printf("0"); exit(0); } if(a[x]==1) { dp[x][1][0]=dp[x-1][1][1]; dp[x][0][1]=dp[x-1][1][0]; } if(a[x]==2) { dp[x][1][1]=dp[x-1][0][1]; dp[x][1][0]=dp[x-1][1][1]; dp[x][0][1]=dp[x-1][1][0]; } else if(a[x]==3) { dp[x][1][1]=dp[x-1][0][1]; } } else if(a[x-1]==3) { if(a[x]==0) { printf("0"); exit(0); } if(a[x]==1) { printf("0"); exit(0); } else { dp[x][1][1]=dp[x-1][1][1]; } } } int main() { n=read(); for(int i=1;i<=n;i++) { a[i]=read(); } if(a[1]==3||a[n]==3) { printf("0"); return 0; } if(a[1]==1) { dp[1][0][1]=1; dp[1][0][0]=1; } else if(a[1]==0) { dp[1][0][0]=1; } else if(a[1]==2) { dp[1][0][1]=1; } for(int i=2;i<=n;i++) { dfs(i); } /* for(int i=1;i<=n;i++) { printf("%d %d %d %d\n",dp[i][0][0],dp[i][1][0],dp[i][0][1],dp[i][1][1]); }*/ if(a[n]==1) { printf("%d",dp[n][1][0]+dp[n][0][1]); } else if(a[n]==2) { printf("%d",dp[n][1][1]); } else if(a[n]==0) { printf("%d",dp[n][0][0]); } } ```
by sunxiaofan @ 2019-10-05 11:01:35


orz
by jack070906 @ 2020-03-29 18:12:51


|