BZOJ1088: [SCOI2005]扫雷Mine
2017-12-05 13:10
429 查看
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\n",f [a[n+1]-1][0]+f [a[n+1]][0]); 33 return 0; 34 }View Code
相关文章推荐
- [BZOJ1088][SCOI2005]扫雷Mine
- _bzoj1088 [SCOI2005]扫雷Mine【dp】
- BZOJ 1088: [SCOI2005]扫雷Mine( )
- [BZOJ1088][SCOI2005]扫雷Mine
- BZOJ 1088: [SCOI2005]扫雷Mine
- 【递推】BZOJ 1088: [SCOI2005]扫雷Mine
- 【BZOJ】1088: [SCOI2005]扫雷Mine(递推)
- [BZOJ 1088][SCOI2005]扫雷Mine
- BZOJ 1088: [SCOI2005]扫雷Mine【模拟】
- [BZOJ 1088] SCOI 2005 扫雷Mine · 暴力
- 【BZOJ1088】[SCOI2005]扫雷Mine【枚举】【分类讨论】
- 【BZOJ 1088】 [SCOI2005]扫雷Mine
- BZOJ 1088: [SCOI2005]扫雷Mine 模拟
- BZOJ 1088: [SCOI2005]扫雷Mine
- BZOJ 1088: [SCOI2005]扫雷Mine 枚举
- BZOJ 1088: [SCOI2005]扫雷Mine【思维题,神奇的模拟+枚举】
- 【codevs2452】【SCOI2005】【BZOJ1088】扫雷Mine
- BZOJ 1088: [SCOI2005]扫雷Mine 模拟,规律,脑洞
- BZOJ 1088 [SCOI2005]扫雷Mine
- [BZOJ 1088] [SCOI2005] 扫雷Mine