• hdu 1760 A New Tetris Game 博弈论


    找sg值,可以选择暴力,也可以利用sg值的特点简化。

    暴力就跟取石子一样,没什么差别,DFS搞定。把矩阵看成一个字符串,字符串就是一个状态。
    其实我们也可以不暴力求sg值,因为只要当前状态能到达一个sg值为0的点,当前状态就是必胜点。
    若当前点到达的所有状态都是必胜的,那么当前点就是必败点。所以当我们到达必胜点时,就必须转换当前状态继续递归找sg值。
    代码如下:
     1 #include<iostream>
     2 #include<stdio.h>
     3 #include<algorithm>
     4 #include<iomanip>
     5 #include<cmath>
     6 #include<cstring>
     7 #include<vector>
     8 #define ll __int64
     9 #define pi acos(-1.0)
    10 #define MAX 50000
    11 using namespace std;
    12 char str[40][40];
    13 int n,m;
    14 void change(int i,int j,char c)
    15 {
    16     str[i][j]=str[i][j+1]=str[i+1][j]=str[i+1][j+1]=c;
    17 }
    18 bool solve()
    19 {
    20     int i,j,flag=0;
    21     for(i=0;i<n-1;i++)
    22     for(j=0;j<m-1;j++){
    23         if(str[i][j]=='0'&&str[i][j+1]=='0'&&str[i+1][j]=='0'&&str[i+1][j+1]=='0'){
    24             change(i,j,'1');
    25             flag++;
    26             if(!solve()){
    27                 change(i,j,'0');
    28                 return 1;
    29             }
    30             change(i,j,'0');
    31         }
    32     }
    33     if(flag<=1) return flag;
    34     return 0;
    35 }
    36 int main(){
    37     while(cin>>n>>m){
    38         for(int i=0;i<n;i++) cin>>str[i];
    39         if(solve()) cout<<"Yes"<<endl;
    40         else cout<<"No"<<endl;
    41     }
    42     return 0;
    43 }
    View Code

  • 相关阅读:
    ADO.NET调用存储过程
    存储过程
    web Servise(服务)
    ADO.NET连接池
    ADO.NET
    常用语法2
    常用语法
    修改pip源为国内网站
    模块
    random模块
  • 原文地址:https://www.cnblogs.com/xin-hua/p/3251329.html
Copyright © 2020-2023  润新知