• poj3537--Crosses and Crosses


    题意:有个一维棋盘,两人轮流下棋,然后谁连成三个谁赢

    记得去年fj夏令营有见过这题,但是太弱了, 不会做。

    记忆化搜索,如果n<=3肯定先手必胜,递推即可。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cmath>
     5 #include<string>
     6 #include<algorithm>
     7 int sg[2005],n;
     8 int dfs(int n){
     9     if (sg[n]!=-1) return sg[n];
    10     if (n<=3) return sg[n]=1;
    11     int h[2005];
    12     memset(h,0,sizeof h);
    13     for (int i=1;i<=n;i++){
    14         if (i>3){
    15             if (i<n-2)
    16              h[dfs(n-i-2)^dfs(i-3)]=1;
    17             else
    18              h[dfs(i-3)]=1; 
    19         }
    20         else{
    21         if (i<n-2)
    22         {h[dfs(n-i-2)]=1;}
    23         else
    24         h[0]=1;}
    25     }
    26     int i;
    27     for (i=0;h[i];i++);
    28     return sg[n]=i;
    29 }
    30 int main(){
    31     memset(sg,-1,sizeof sg);
    32     while (~scanf("%d",&n)){
    33     if (dfs(n)) printf("1
    ");else printf("2
    ");}
    34 }
  • 相关阅读:
    JavaScript HTML DOM
    JavaScript 对象与函数
    DVWA--Command Injection
    sqli-libs(2)
    python学习之路(17)
    sqli-labs(1)
    python学习之路(16)
    python学习之路(15)
    DVWA--Brute Force
    python学习之路(14)
  • 原文地址:https://www.cnblogs.com/qzqzgfy/p/5266829.html
Copyright © 2020-2023  润新知