题目
My way:
这题靠归纳推理,首先很明显就能看出来偶数的时候Alice赢了;
然后多举了几个例子就发现奇数的时候Bob赢了。
就直接一个条件语句,结束。
但是尝试套dp的做法的时候,没捋清楚,看了综评最高的,基本懂了。
1 | class Solution { |
综评最高解
1.归纳法:
基本思路:
最终结果应该是占到 2 的赢,占到 1 的输;
若当前为奇数,奇数的约数只能是奇数或者 1,因此下一个一定是偶数;
若当前为偶数, 偶数的约数可以是奇数可以是偶数也可以是 1,因此直接减 1,则下一个是奇数;
因此,奇则输,偶则赢。
1 | class Solution: |
2.DP:
- 定义状态
- \(i\): 数字\(N\)为\(i\)时;
- \(f[i]\): 数字\(N\)为\(i\)时,Alice的胜负状况,
true
为胜,false
为负。
- 定义状态转移方程:
\[ f[i] = \begin{cases} true, & \text{if}\ f[i-j] == false,\ \text{if}\ i\ \%\ j == 0\ \\ & and\ j\ is\ unsigned\ integer\ which \in (0, N) \ \\ false, & \text{otherwise} \end{cases} \]
实现
1 | class Solution { |
综评解
1 | class Solution: |
总结
- 初等数学review:
- 奇数的因数: {奇数}
- 偶数的因数: {偶数}
- 奇数的最大公因数 = 奇数
- 目前做到的dp还是简单递推问题,可以简单套换成:
- 状态\(i\)就是数字为\(i\)的时候
- \(f[i]\)就是数字为\(i\)时候,结果为\(f[i]\)