03动态规划-04coins-in-a-line

来源:互联网 发布:厄米特矩阵的逆也是 编辑:程序博客网 时间:2024/05/21 19:29

有 n 个硬币排成一条线。两个参赛者轮流从右边依次拿走 1 或 2 个硬币,直到没有硬币为止。拿到最后一枚硬币的人获胜。

请判定 第一个玩家 是输还是赢?

样例

n = 1, 返回 true.

n = 2, 返回 true.

n = 3, 返回 false.

n = 4, 返回 true.

n = 5, 返回 true.

========================================================================================

先手赢的情景:在先手玩家自己取完的两种情况(取一枚和取两枚)的任意一种下,无论后手取一枚或是两枚都是自己赢的情况。

 public boolean firstWillWin(int n) {        if(n==0)return false;        if(n==1)return true;        if(n==2)return true;        if(n==3)return false;        if(n==4)return true;        if(n==5)return true;                boolean[] b = new boolean[n];        b[0] = true;        b[1] = true;        b[2] = false;        b[3] = true;        b[4] = true;                for(int i = 4; i<n ; i++){            //先手取1 后手取1 && 先手取1 后手取2 ||  先手取2 后手取2  &&   先手取2 后手取1            if( b[i-2]&&b[i-3] || b[i-4]&&b[i-3] )                b[i] = true;            else                 b[i] = false;        }                return b[n-1];            }



0 0
原创粉丝点击