Algorithm
lc464_我能赢吗
思路: 好像是一个除数奇偶和余数叠加在一起的判断
假设: 如果除法结果是偶数,那么先手必胜
因为先手可以先给出余数-1
,然后就可以一直用这个策略,保持除法结果在偶数
规律没这么简单,暂时想了比较久没有找到,看答案吧
结果发现无法找规律(不该没有先看数据范围…),而是要 记忆化搜索 + 状态压缩
链接:https://leetcode.cn/problems/can-i-win/solution/wo-neng-ying-ma-by-leetcode-solution-ef5v/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
func canIWin(maxChoosableInteger, desiredTotal int) bool {
if (1+maxChoosableInteger)*maxChoosableInteger/2 < desiredTotal {
return false
}
dp := make([]int8, 1<<maxChoosableInteger)
for i := range dp {
dp[i] = -1
}
var dfs func(int, int) int8
dfs = func(usedNum, curTot int) (res int8) {
// 下面这个defer记忆搜索的操作很秀,学习之,C++需要自己每次在末尾赋值
dv := &dp[usedNum]
if *dv != -1 {
return *dv
}
defer func() { *dv = res }()
for i := 0; i < maxChoosableInteger; i++ {
if usedNum>>i&1 == 0 && (curTot+i+1 >= desiredTotal || dfs(usedNum|1<<i, curTot+i+1) == 0) {
return 1
}
}
return
}
return dfs(0, 0) == 1
}
|
Review
【TED演讲】美国被遗忘的工人阶级
马太效应一直在持续,贫穷的马太效应也一样如此,我们需要一个更好的解决方法,让父母减少给孩子的负面影响
并且还需要让人们知道不要受限于自己的处境,你能做你想做的一切,为而不争地去做
但是现实是没有更好的生活,大家连生育都不想进行,所以还是需要很多的思考和努力去解决这些问题
Tips
【Golang】怎样优雅的清空切片
Share
VScode ssh免密登录设置