leetcode 464 我能贏嗎

2022-06-01 01:57:15 字數 1119 閱讀 5342

參考思路是遍歷每一種可能性,得出必勝的走法。然而,用遞迴會存在很多的重複計算,所以可用動態規劃儲存下計算的狀態,用map儲存,其中int對應current,考慮

,所以可以用int來儲存1~20的數字是否使用,比如1,就相當於1|current 即將第一位 置1 ,以此類推。

首先判斷,如果maxchoosableinteger >= desiredtotal ,則先手必勝

如果全部的和 小於 desiredtotal 則都是輸的

剩餘情況採用迴圈遍歷,然後將對應狀態儲存下來,若能贏,則返回 true

//

study.cpp: 定義控制台應用程式的入口點。

//#include

"stdafx.h

"#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define int_max 2147483647 //

maximum (signed) int value

#define int_min (-2147483647 - 1) //

minimum (signed) int value

;#define min(x,y) (x)

using

namespace

std;

int max(int a, int

b)bool helper(int length, int total, int used, unordered_map &map)}}

map[used] = false

;

return

false;}

bool caniwin(int maxchoosableinteger, int

desiredtotal)

intmain()

leetcode 464 我能贏嗎

題目 在 100 game 這個遊戲中,兩名玩家輪流選擇從 1 到 10 的任意整數,累計整數和,先使得累計整數和達到 100 的玩家,即為勝者。如果我們將遊戲規則改為 玩家不能重複使用整數 呢?例如,兩個玩家可以輪流從公共整數池中抽取從 1 到 15 的整數 不放回 直到累計整數和 100。給定乙...

leetcode 464 我能贏嗎?

在 100 game 這個遊戲中,兩名玩家輪流選擇從 1 到 10 的任意整數,累計整數和,先使得累計整數和達到 100 的玩家,即為勝者。如果我們將遊戲規則改為 玩家不能重複使用整數 呢?例如,兩個玩家可以輪流從公共整數池中抽取從 1 到 15 的整數 不放回 直到累計整數和 100。給定乙個整數...

464 我能贏嗎

在 100 game 這個遊戲中,兩名玩家輪流選擇從 1 到 10 的任意整數,累計整數和,先使得累計整數和達到 100 的玩家,即為勝者。如果我們將遊戲規則改為 玩家不能重複使用整數 呢?例如,兩個玩家可以輪流從公共整數池中抽取從 1 到 15 的整數 不放回 直到累計整數和 100。給定乙個整數...