zoukankan      html  css  js  c++  java
  • 扫雷

    相信大家都玩过扫雷的游戏。那是在一个n*n的矩阵里面有一些雷,要你根据一些信息找出雷来。万圣节到了,“余”任过流行起了一种简单的扫雷游戏,这个游戏规则和扫雷一样,如果某个格子没有雷,那么它里面的数字表示和他8连通的格子里面雷的数目。现在棋盘是n*2的,第一列里某些格子是雷,而第二列没有雷,如:
    o 1
    * 2
    * 3
    * 2
    o 2
    * 2
    * 2 ('*'代表有雷,'o'代表无雷)
    由于第一类的雷有可能有多种方案满足第二列的数的限制,你的任务即根据第二列的信息求第一列雷有多少中摆放方案。

     1 #include<iostream>
     2 #include<string>
     3 using namespace std;
     4 
     5 int n,a[10005],f[10005][2][2]={0};
     6 
     7 int find(int m,int x,int y){
     8     if(f[m][x][y]!=-1) return f[m][x][y];
     9     if(a[m]==0) 
    10     {
    11       if(x+y>0) {f[m][x][y]=0;return f[m][x][y];}
    12       f[m][0][0]=find(m-1,0,0);
    13       return f[m][0][0];
    14                 }
    15     if(a[m]==1)
    16     {
    17       if(x+y>1) {f[m][x][y]=0;return f[m][x][y];}
    18       if(x+y==1) {f[m][x][y]=find(m-1,y,0);return f[m][x][y];}
    19       if(x+y<1) {f[m][x][y]=find(m-1,y,1);return f[m][x][y];}         
    20                }
    21     
    22     if(a[m]==2)
    23     {
    24       if(x+y>2) {f[m][x][y]=0;return f[m][x][y];}
    25       if(x+y==2) {f[m][x][y]=find(m-1,y,0);return f[m][x][y];}
    26       if(x+y==1) {f[m][x][y]=find(m-1,y,1);return f[m][x][y];}    
    27       if(x+y==0) {f[m][x][y]=0;return f[m][x][y];}   
    28                }
    29     
    30     if(a[m]==3)
    31     {
    32       if(x+y>=3) {f[m][x][y]=0;return f[m][x][y];}
    33       if(x+y==2) {f[m][x][y]=find(m-1,y,1);return f[m][x][y];}    
    34       if(x+y<2) {f[m][x][y]=0;return f[m][x][y];}   
    35                }
    36     
    37     
    38     }
    39 
    40 int main()
    41 {
    42     cin>>n;
    43     for(int i=1;i<=n;++i)
    44     {cin>>a[i];f[i][0][0]=-1;f[i][0][1]=-1;f[i][1][0]=-1;f[i][1][1]=-1;}
    45     if(a[1]==0) {f[1][0][0]=1;f[1][0][1]=0;f[1][1][0]=0;f[1][1][1]=0;}
    46     if(a[1]==1) {f[1][0][0]=0;f[1][0][1]=1;f[1][1][0]=1;f[1][1][1]=0;}
    47     if(a[1]==2) {f[1][0][0]=0;f[1][0][1]=0;f[1][1][0]=0;f[1][1][1]=1;}
    48     if(a[1]==3) {f[1][0][0]=0;f[1][0][1]=0;f[1][1][0]=0;f[1][1][1]=0;}
    49     
    50     cout<<find(n,0,1)+find(n,0,0)<<endl;
    51     
    52    // system("pause");
    53 
    54     } 
  • 相关阅读:
    前端性能优化-雅虎军规
    Webpack简易入门教程
    orm框架的使用
    【Nginx】使用nginx反向代理IIS实现80端口的解放
    【开发调试】谷歌浏览器中调试移动网页和测试网速下页面效果
    Identity4实现服务端+api资源控制+客户端请求
    【问题】VS问题集合,不用也要收藏防止以后使用找不到
    【worker】js中的多线程
    pdf.js插件使用记录,在线打开pdf
    【CSS】小妙招,各种问题总结方法处理
  • 原文地址:https://www.cnblogs.com/noip/p/7792381.html
Copyright © 2011-2022 走看看