码迷,mamicode.com
首页 > 其他好文 > 详细

hdu 2147 kiki's game(DP(SG)打表找规律)

时间:2014-10-01 23:23:41      阅读:244      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   for   数据   sp   div   c   on   

题意:

n*m的棋盘,一枚硬币右上角,每人每次可将硬币移向三个方向之一(一格单位):左边,下边,左下边。

无法移动硬币的人负。

给出n和m,问,先手胜还是后手胜。

 

数据范围:

n, m (0<n,m<=2000)

 

思路:

dp[i][j]=0,说明从(i,j)这个点到时左下角先手败。dp[i][j]=1则先手胜。

然后记忆搜。但是记忆搜会超时。

搜完把整张表打出来,发现规律了,,,,然后,,,代码剩几行了。

 

代码:

///打表观察

/*
int f[2005][2005];

int go(int n,int m){ //0:必败 1:必胜
    if(f[n][m]!=-1) return f[n][m];
    int a1 = n-1, b1 = m;
    int a2 = n, b2 = m-1;
    int a3 = n-1,b3 = m-1;

    if(a1>=1 && b1>=1 && go(a1,b1)==1) return f[n][m] = 0;
    if(a2>=1 && b2>=1 && go(a2,b2)==1) return f[n][m] = 0;
    if(a3>=1 && b3>=1 && go(a3,b3)==1) return f[n][m] = 0;
    return f[n][m] = 1;
}
*/

int main(){
    int n,m;

    while(scanf("%d%d",&n,&m),n||m){
        /*
        rep(i,1,n)
            rep(j,1,m) f[i][j] = -1;

        f[1][1] = 0;

        go(n,m);

        rep(i,1,n){
            rep(j,1,m) printf("%d",f[i][j]); cout<<endl;
        }
        */
        if(n%2 && m%2)
            puts("What a pity!");
        else
            puts("Wonderful!");
    }
}

 

hdu 2147 kiki's game(DP(SG)打表找规律)

标签:style   blog   color   for   数据   sp   div   c   on   

原文地址:http://www.cnblogs.com/fish7/p/4003543.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!