免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
1510. Stone Game IV (H)

Stone Game IV (H)

題目

Alice and Bob take turns playing a game, with Alice starting first.

Initially, there are n stones in a pile. On each player's turn, that player makes a move consisting of removing any non-zero square number of stones in the pile.

Also, if a player cannot make a move, he/she loses the game.

Given a positive integer n. Return True if and only if Alice wins the game otherwise return False, assuming both players play optimally.

Example 1:

Input: n = 1
Output: true
Explanation: Alice can remove 1 stone winning the game because Bob doesn't have any moves.

Example 2:

Input: n = 2
Output: false
Explanation: Alice can only remove 1 stone, after that Bob removes the last one winning the game (2 -> 1 -> 0).

Example 3:

Input: n = 4
Output: true
Explanation: n is already a perfect square, Alice can win with one move, removing 4 stones (4 -> 0).

Example 4:

Input: n = 7
Output: false
Explanation: Alice can't win the game if Bob plays optimally.
If Alice starts removing 4 stones, Bob will remove 1 stone then Alice should remove only 1 stone and finally Bob removes the last one (7 -> 3 -> 2 -> 1 -> 0). 
If Alice starts removing 1 stone, Bob will remove 4 stones then Alice only can remove 1 stone and finally Bob removes the last one (7 -> 6 -> 2 -> 1 -> 0).

Example 5:

Input: n = 17
Output: false
Explanation: Alice can't win the game if Bob plays optimally.

Constraints:

  • 1 <= n <= 10^5

題意

兩人輪流取數(shù),每次只能取走一個(gè)平方數(shù),當(dāng)前回合無(wú)法取出平方數(shù)的人算輸。在都采取最優(yōu)策略的前提下,判斷先取的人是否一定贏。

思路

假設(shè)f(n)=true表示總數(shù)為n時(shí)先取的人能贏。若取走的平方數(shù)為k,很明顯只要f(n-k)為false(第二個(gè)取的人會(huì)輸),第一個(gè)取的人就能贏。兩種實(shí)現(xiàn)方式:記憶化搜索和動(dòng)態(tài)規(guī)劃。


代碼實(shí)現(xiàn)

Java

記憶化搜索

class Solution {
    public boolean winnerSquareGame(int n) {
        Map<Integer, Boolean> record = new HashMap<>();
        return dfs(n, record);
    }

    private boolean dfs(int n, Map<Integer, Boolean> record) {
        if (n == 0) {
            return false;
        }

        if (record.containsKey(n)) {
            return record.get(n);
        }

        for (int i = 1; i*i <= n;i++) {
            if (!dfs(n - i * i, record)) {
                record.put(n, true);
                return true;
            }
        }

        record.put(n, false);
        return false;
    }
}

動(dòng)態(tài)規(guī)劃

class Solution {
    public boolean winnerSquareGame(int n) {
        boolean[] dp = new boolean[n + 1];
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j * j <= i; j++) {
                if (!dp[i - j * j]) {
                    dp[i] = true;
                    break;
                }
            }
        }
        return dp[n];
    }
}
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
為啥SSL是通信加密?
551,回溯算法解分割回文串
但這是我最想講的故事
公鑰系統(tǒng)/數(shù)字簽名
Erasure code
Security Briefs: Explore the Security Support Provider Interface Using the SSPI Workbench Utility --
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服