• leetcode1728 猫和老鼠II


    思路:

    博弈dp。

    实现:

     1 int dp[8][8][8][8][1001];
     2 class Solution {
     3 public:
     4     const int dx[4]={1,0,-1,0};
     5     const int dy[4]={0,1,0,-1};
     6     bool dfs(int cx,int cy,int mx,int my,int fx,int fy,int cs,int ms,int cur,vector<string>&a){
     7         if(cur==1000){
     8             return false;
     9         }
    10         int n=a.size(),m=a[0].length();
    11         if(dp[cx][cy][mx][my][cur]!=-1){
    12             return dp[cx][cy][mx][my][cur];
    13         }
    14         if(cur&1){//cat's turn
    15             if(cx==mx and cy==my)return true;
    16             if(cx==fx and cy==fy)return true;
    17             if(mx==fx and my==fy)return false;
    18             bool res=false;
    19             if(!dfs(cx,cy,mx,my,fx,fy,cs,ms,cur+1,a)){
    20                 res=true;
    21             }
    22             else{
    23                 for(int d=0;d<4;d++){
    24                     int cnx=cx,cny=cy;
    25                     for(int s=1;s<=cs;s++){
    26                         cnx+=dx[d];
    27                         cny+=dy[d];
    28                         if(cnx<0 or cnx>=n or cny<0 or cny>=m or a[cnx][cny]=='#'){
    29                             break;
    30                         }
    31                         if(!dfs(cnx,cny,mx,my,fx,fy,cs,ms,cur+1,a)){
    32                             res=true;break;
    33                         }
    34                     }
    35                     if(res)break;
    36                 }
    37             }
    38             return dp[cx][cy][mx][my][cur]=res;
    39         }
    40         else{//mouse's turn
    41             if(cx==mx and cy==my)return false;
    42             if(mx==fx and my==fy)return true;
    43             if(cx==fx and cy==fy)return false;
    44             bool res=false;
    45             if(!dfs(cx,cy,mx,my,fx,fy,cs,ms,cur+1,a)){
    46                 res=true;
    47             }
    48             else{
    49                 for(int d=0;d<4;d++){
    50                     int mnx=mx,mny=my;
    51                     for(int s=1;s<=ms;s++){
    52                         mnx+=dx[d];
    53                         mny+=dy[d];
    54                         if(mnx<0 or mnx>=n or mny<0 or mny>=m or a[mnx][mny]=='#'){
    55                             break;
    56                         }
    57                         if(!dfs(cx,cy,mnx,mny,fx,fy,cs,ms,cur+1,a)){
    58                             res=true;break;
    59                         }
    60                     }
    61                     if(res)break;
    62                 }
    63             }
    64             return dp[cx][cy][mx][my][cur]=res;
    65         }
    66     }
    67     bool canMouseWin(vector<string>&a, int x, int y) {
    68         int n=a.size(),m=a[0].size();
    69         for(int i=0;i<n;i++){
    70             for(int j=0;j<m;j++){
    71                 for(int k=0;k<n;k++){
    72                     for(int l=0;l<m;l++){
    73                         for(int p=0;p<=1000;p++){
    74                             dp[i][j][k][l][p]=-1;
    75                         }
    76                     }
    77                 }
    78             }
    79         }
    80         int cx=-1,cy=-1,mx=-1,my=-1,fx=-1,fy=-1;
    81         for(int i=0;i<n;i++){
    82             for(int j=0;j<m;j++){
    83                 if(a[i][j]=='C'){
    84                     cx=i;cy=j;
    85                 }
    86                 else if(a[i][j]=='M'){
    87                     mx=i;my=j;
    88                 }
    89                 else if(a[i][j]=='F'){
    90                     fx=i;fy=j;
    91                 }
    92             }
    93         }
    94         return dfs(cx,cy,mx,my,fx,fy,x,y,0,a);
    95     }
    96 };
  • 相关阅读:
    10.RobotFramework: 获取当前时间戳
    9.接口自动化-自定义关键字、接口设计规范
    8.接口自动化-RequestLibrary库的介绍与示例讲解
    7.接口自动化-环境常用库搭建
    6.数据库操作(DatabaseLibrary)与常见问题
    5.远程服务器操作(SSHLibrary)
    概率密度与概率分布函数
    Linux安装包类型
    随机变量与随机过程
    hosts文件
  • 原文地址:https://www.cnblogs.com/wangyiming/p/16266554.html
Copyright © 2020-2023  润新知