Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 325f885

Browse files
committed
修正 Latex 语句格式
1 parent e40d2b4 commit 325f885

29 files changed

+72
-72
lines changed

‎Contents/00.Introduction/02.Algorithm-Complexity.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ def algorithm(n):
185185
return cnt
186186
```
187187

188-
上述代码中 `cnt = 1` 的时间复杂度为 $O(1)$ 可以忽略不算。`while` 循环体中 $cnt$ 从 1ドル$ 开始,每循环一次都乘以 2ドル$。当大于等于 $n$ 时循环结束。变量 $cnt$ 的取值是一个等比数列:2ドル^0,2^1,2^2,...,2^x,ドル根据 2ドル^x = n,ドル可以得出这段循环体的执行次数为 $\log_2n,ドル所以这段代码的时间复杂度为 $O(\log_2n)$。
188+
上述代码中 `cnt = 1` 的时间复杂度为 $O(1)$ 可以忽略不算。`while` 循环体中 $cnt$ 从 1ドル$ 开始,每循环一次都乘以 2ドル$。当大于等于 $n$ 时循环结束。变量 $cnt$ 的取值是一个等比数列:2ドル^0, 2^1, 2^2, ..., 2^x,ドル根据 2ドル^x = n,ドル可以得出这段循环体的执行次数为 $\log_2n,ドル所以这段代码的时间复杂度为 $O(\log_2n)$。
189189

190190
因为 $\log n = k \times \log_2 n,ドル这里 $k = 3.322,ドル所以,$\log n$ 与 $\log_2 n$ 的差别比较小。为了方便书写,通常我们将对数时间复杂度写作是 $O(\log n)$。
191191

‎Contents/07.Tree/01.Binary-Tree/01.Binary-Tree-Basic.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
- 包括根节点在内,每个节点可以有多个后继节点。
1616
- 当 $n > 1$ 时,除了根节点之外的其他节点,可分为 $m(m > 0)$ 个互不相交的有限集合 $T_1, T_2, ..., T_m,ドル其中每一个集合本身又是一棵树,并且被称为根的 **「子树(SubTree)」**
1717

18-
如下图所示,红色节点 $A$ 是根节点,除了根节点之外,还有 `3` 棵互不相交的子树 $T_1(B、E、H、I、G)$、$T_2(C)$、$T_3(D、F、G、K)$。
18+
如下图所示,红色节点 $A$ 是根节点,除了根节点之外,还有 `3` 棵互不相交的子树 $T_1(B, E, H, I, G)$、$T_2(C)$、$T_3(D, F, G, K)$。
1919

2020
![](https://qcdn.itcharge.cn/images/20220218104556.png)
2121

‎Contents/07.Tree/04.Binary-Indexed-Tree/01.Binary-Indexed-Tree.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
### 1.1 树状数组的定义
44

5-
> **树状数组(Binary Indexed Tree)**:也因其发明者命名为 Fenwick 树,最早由 Peter M. Fenwick 于 1994 年以 A New Data Structure for Cumulative Frequency Tables 为题发表在 SOFTWARE PRACTICE AND EXPERIENCE。其初衷是解决数据压缩里的累积频率(Cumulative Frequency)的计算问题,现多用于高效计算数列的前缀和,区间和。它可以以 $O(\log n)$ 的时间得到任意前缀 $\sum_{i=1}^{j}A[i], 1 \le j \le N,ドル并同时支持在 $O(\log n)$ 时间内支持动态单点值的修改。空间复杂度为 $O(n)$。
5+
> **树状数组(Binary Indexed Tree)**:也因其发明者命名为 Fenwick 树,最早 Peter M. Fenwick 于 1994 年以 A New Data Structure for Cumulative Frequency Tables 为题发表在 SOFTWARE PRACTICE AND EXPERIENCE。其初衷是解决数据压缩里的累积频率(Cumulative Frequency)的计算问题,现多用于高效计算数列的前缀和,区间和。它可以以 $O(\log n)$ 的时间得到任意前缀 $\sum_{i=1}^{j}A[i], 1 \le j \le n,ドル并同时支持在 $O(\log n)$ 时间内支持动态单点值的修改。空间复杂度为 $O(n)$。
66
77
### 1.2 树状数组的原理
88

‎Contents/10.Dynamic-Programming/04.Knapsack-Problem/02.Knapsack-Problem-02.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,12 @@
3636
3737
则状态转移方程为:
3838

39-
$dp[i][w] = max \lbrace dp[i - 1][w - k \times weight[i - 1]] + k \times value[i - 1] \rbrace,\quad 0 \le k \times weight[i - 1] \le w$。
39+
$dp[i][w] = max \lbrace dp[i - 1][w - k \times weight[i - 1]] + k \times value[i - 1] \rbrace, \quad 0 \le k \times weight[i - 1] \le w$。
4040

4141
###### 4. 初始条件
4242

43-
- 如果背包载重上限为 0ドル,ドル则无论选取什么物品,可以获得的最大价值一定是 0ドル,ドル即 $dp[i][0] = 0,0 \le i \le size$。
44-
- 无论背包载重上限是多少,前 0ドル$ 种物品所能获得的最大价值一定为 0ドル,ドル即 $dp[0][w] = 0,0 \le w \le W$。
43+
- 如果背包载重上限为 0ドル,ドル则无论选取什么物品,可以获得的最大价值一定是 0ドル,ドル即 $dp[i][0] = 0, 0 \le i \le size$。
44+
- 无论背包载重上限是多少,前 0ドル$ 种物品所能获得的最大价值一定为 0ドル,ドル即 $dp[0][w] = 0, 0 \le w \le W$。
4545

4646
###### 5. 最终结果
4747

@@ -81,15 +81,15 @@ class Solution:
8181

8282
我们将之前的状态转移方程
8383

84-
$dp[i][w] = max \lbrace dp[i - 1][w - k \times weight[i - 1]] + k \times value[i - 1] \rbrace,\quad 0 \le k \times weight[i - 1] \le w$
84+
$dp[i][w] = max \lbrace dp[i - 1][w - k \times weight[i - 1]] + k \times value[i - 1] \rbrace, \quad 0 \le k \times weight[i - 1] \le w$
8585

8686
进行展开:
8787

88-
$(1) \quad dp[i][w] = max \begin{cases} dp[i - 1][w] \cr dp[i - 1][w - weight[i - 1]] + value[i - 1] \cr dp[i - 1][w - 2 \times weight[i - 1]] + 2 \times value[i - 1] \cr ...... \cr \cr dp[i - 1][w - k \times weight[i - 1]] + k \times value[i - 1] \end{cases},\quad 0 \le k \times weight[i - 1] \le w$
88+
$(1) \quad dp[i][w] = max \begin{cases} dp[i - 1][w] \cr dp[i - 1][w - weight[i - 1]] + value[i - 1] \cr dp[i - 1][w - 2 \times weight[i - 1]] + 2 \times value[i - 1] \cr ...... \cr \cr dp[i - 1][w - k \times weight[i - 1]] + k \times value[i - 1] \end{cases}, \quad 0 \le k \times weight[i - 1] \le w$
8989

9090
而对于 $dp[i][w - weight[i - 1]]$ 我们有:
9191

92-
$(2) \quad dp[i][w - weight[i - 1]] = max \begin{cases} dp[i - 1][w - weight[i - 1]] \cr dp[i - 1][w - 2 \times weight[i - 1]] + value[i - 1] \cr dp[i - 1][w - 3 \times weight[i - 1]] + 2 \times value[i - 1] \cr ...... \cr dp[i - 1][w - k \times weight[i - 1]] + (k - 1) \times value[i - 1] \end{cases},\quad weight[i - 1] \le k \times weight[i - 1] \le w$
92+
$(2) \quad dp[i][w - weight[i - 1]] = max \begin{cases} dp[i - 1][w - weight[i - 1]] \cr dp[i - 1][w - 2 \times weight[i - 1]] + value[i - 1] \cr dp[i - 1][w - 3 \times weight[i - 1]] + 2 \times value[i - 1] \cr ...... \cr dp[i - 1][w - k \times weight[i - 1]] + (k - 1) \times value[i - 1] \end{cases}, \quad weight[i - 1] \le k \times weight[i - 1] \le w$
9393

9494
通过观察可以发现:
9595

@@ -133,8 +133,8 @@ $\quad dp[i][w] = \begin{cases} dp[i - 1][w] & w < weight[i - 1] \cr max \lbrac
133133

134134
###### 4. 初始条件
135135

136-
- 如果背包载重上限为 0ドル,ドル则无论选取什么物品,可以获得的最大价值一定是 0ドル,ドル即 $dp[i][0] = 0,0 \le i \le size$。
137-
- 无论背包载重上限是多少,前 0ドル$ 种物品所能获得的最大价值一定为 0ドル,ドル即 $dp[0][w] = 0,0 \le w \le W$。
136+
- 如果背包载重上限为 0ドル,ドル则无论选取什么物品,可以获得的最大价值一定是 0ドル,ドル即 $dp[i][0] = 0, 0 \le i \le size$。
137+
- 无论背包载重上限是多少,前 0ドル$ 种物品所能获得的最大价值一定为 0ドル,ドル即 $dp[0][w] = 0, 0 \le w \le W$。
138138

139139
###### 5. 最终结果
140140

@@ -201,7 +201,7 @@ $dp[w] = \begin{cases} dp[w] & w < weight[i - 1] \cr max \lbrace dp[w], \quad d
201201

202202
###### 4. 初始条件
203203

204-
- 无论背包载重上限为多少,只要不选择物品,可以获得的最大价值一定是 0ドル,ドル即 $dp[w] = 0,0 \le w \le W$。
204+
- 无论背包载重上限为多少,只要不选择物品,可以获得的最大价值一定是 0ドル,ドル即 $dp[w] = 0, 0 \le w \le W$。
205205

206206
###### 5. 最终结果
207207

‎Contents/10.Dynamic-Programming/04.Knapsack-Problem/03.Knapsack-Problem-03.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ $dp[i][w] = max \lbrace dp[i - 1][w - k \times weight[i - 1]] + k \times value[i
2626

2727
###### 4. 初始条件
2828

29-
- 如果背包载重上限为 0ドル,ドル则无论选取什么物品,可以获得的最大价值一定是 0ドル,ドル即 $dp[i][0] = 0,0 \le i \le size$。
30-
- 无论背包载重上限是多少,前 0ドル$ 种物品所能获得的最大价值一定为 0ドル,ドル即 $dp[0][w] = 0,0 \le w \le W$。
29+
- 如果背包载重上限为 0ドル,ドル则无论选取什么物品,可以获得的最大价值一定是 0ドル,ドル即 $dp[i][0] = 0, 0 \le i \le size$。
30+
- 无论背包载重上限是多少,前 0ドル$ 种物品所能获得的最大价值一定为 0ドル,ドル即 $dp[0][w] = 0, 0 \le w \le W$。
3131

3232
###### 5. 最终结果
3333

@@ -121,7 +121,7 @@ class Solution:
121121

122122
但我们还是可以从物品数量入手,通过「二进制优化」的方式,将算法的时间复杂度降低。
123123

124-
> **二进制优化**:简单来说,就是把物品的数量 $count[i]$ 拆分成「由 1ドル、2、4、...、2^m$ 件单个物品组成的大物品」,以及「剩余不足 2ドル$ 的整数次幂数量的物品,由 $count[i] -2^{\lfloor \log_2(count[i] + 1) \rfloor - 1}$ 件单个物品组成大物品」。
124+
> **二进制优化**:简单来说,就是把物品的数量 $count[i]$ 拆分成「由 1ドル, 2, 4, ..., 2^m$ 件单个物品组成的大物品」,以及「剩余不足 2ドル$ 的整数次幂数量的物品,由 $count[i] -2^{\lfloor \log_2(count[i] + 1) \rfloor - 1}$ 件单个物品组成大物品」。
125125
126126
举个例子,第 $i$ 件物品的数量为 31ドル,ドル采用「二进制优化」的方式,可以拆分成 31ドル = 1 + 2 + 4 + 8 + 16$ 一共 5ドル$ 件物品。也将是将 31ドル$ 件物品分成了 5ドル$ 件大物品:
127127

‎Contents/10.Dynamic-Programming/04.Knapsack-Problem/04.Knapsack-Problem-04.md

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -112,12 +112,12 @@ class Solution:
112112

113113
则状态转移方程为:
114114

115-
$dp[i][w] = max \lbrace dp[i - 1][w],dp[i - 1][w - weight[i - 1][k]] + value[i - 1][k] \rbrace , \quad 0 \le k \le group\underline{}count[i - 1]$
115+
$dp[i][w] = max \lbrace dp[i - 1][w], dp[i - 1][w - weight[i - 1][k]] + value[i - 1][k] \rbrace , \quad 0 \le k \le group\underline{}count[i - 1]$
116116

117117
###### 4. 初始条件
118118

119-
- 如果背包载重上限为 0ドル,ドル则无论选取什么物品,可以获得的最大价值一定是 0ドル,ドル即 $dp[i][0] = 0,0 \le i \le size$。
120-
- 无论背包载重上限是多少,前 0ドル$ 组物品所能获得的最大价值一定为 0ドル,ドル即 $dp[0][w] = 0,0 \le w \le W$。
119+
- 如果背包载重上限为 0ドル,ドル则无论选取什么物品,可以获得的最大价值一定是 0ドル,ドル即 $dp[i][0] = 0, 0 \le i \le size$。
120+
- 无论背包载重上限是多少,前 0ドル$ 组物品所能获得的最大价值一定为 0ドル,ドル即 $dp[0][w] = 0, 0 \le w \le W$。
121121

122122
###### 5. 最终结果
123123

@@ -163,11 +163,11 @@ class Solution:
163163

164164
###### 3. 状态转移方程
165165

166-
$dp[w] = max \lbrace dp[w], \quad dp[w - weight[i - 1][k]] + value[i - 1][k] \rbrace ,\quad 0 \le k \le group\underline{}count[i - 1]$
166+
$dp[w] = max \lbrace dp[w], \quad dp[w - weight[i - 1][k]] + value[i - 1][k] \rbrace , \quad 0 \le k \le group\underline{}count[i - 1]$
167167

168168
###### 4. 初始条件
169169

170-
- 无论背包载重上限为多少,只要不选择物品,可以获得的最大价值一定是 0ドル,ドル即 $dp[w] = 0,0 \le w \le W$。
170+
- 无论背包载重上限为多少,只要不选择物品,可以获得的最大价值一定是 0ドル,ドル即 $dp[w] = 0, 0 \le w \le W$。
171171

172172
###### 5. 最终结果
173173

@@ -229,11 +229,11 @@ $dp[i][w][v] = max(dp[i - 1][w][v], dp[i - 1][w - weight[i - 1]][v - volume[i -
229229
###### 4. 初始条件
230230

231231
- 如果背包载重上限为 0ドル$ 或者容量上限为 0ドル,ドル则无论选取什么物品,可以获得的最大价值一定是 0ドル,ドル即:
232-
- $dp[i][w][0] = 0,0 \le i \le size,0 \le w \le W$
233-
- $dp[i][0][v] = 0,0 \le i \le size,0 \le v \le V$
232+
- $dp[i][w][0] = 0, 0 \le i \le size, 0 \le w \le W$
233+
- $dp[i][0][v] = 0, 0 \le i \le size, 0 \le v \le V$
234234

235235
- 无论背包载重上限是多少,前 0ドル$ 种物品所能获得的最大价值一定为 0ドル,ドル即:
236-
- $dp[0][w][v] = 0,0 \le w \le W,0 \le v \le V$
236+
- $dp[0][w][v] = 0, 0 \le w \le W, 0 \le v \le V$
237237

238238

239239
###### 5. 最终结果
@@ -290,8 +290,8 @@ $dp[w][v] = max \lbrace dp[w][v], \quad dp[w - weight[i - 1]][v - volume[i - 1]]
290290
###### 4. 初始条件
291291

292292
- 如果背包载重上限为 0ドル$ 或者容量上限为 0ドル,ドル则无论选取什么物品,可以获得的最大价值一定是 0ドル,ドル即:
293-
- $dp[w][0] = 0,0 \le w \le W$
294-
- $dp[0][v] = 0,0 \le v \le V$
293+
- $dp[w][0] = 0, 0 \le w \le W$
294+
- $dp[0][v] = 0, 0 \le v \le V$
295295

296296

297297
###### 5. 最终结果

‎Contents/10.Dynamic-Programming/04.Knapsack-Problem/05.Knapsack-Problem-05.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,18 @@
66
77
在背包问题中,有的题目不要求把背包装满,而有的题目要求恰好装满背包。
88

9-
如果题目要求「恰好装满背包」,则我们可在原有状态定义、状态转移方程的基础上,在初始化时,令 $dp[0] = 0,ドル以及 $d[w] = -\infty,1 \le w \le W$。 这样就可以保证最终得到的 $dp[W]$ 为恰好装满背包的最大价值总和。
9+
如果题目要求「恰好装满背包」,则我们可在原有状态定义、状态转移方程的基础上,在初始化时,令 $dp[0] = 0,ドル以及 $d[w] = -\infty, 1 \le w \le W$。 这样就可以保证最终得到的 $dp[W]$ 为恰好装满背包的最大价值总和。
1010

1111
这是因为:初始化的 $dp$ 数组实际上就是在没有任何物品可以放入背包时的「合法状态」。
1212

1313
如果不要求恰好装满背包,那么:
1414

15-
1. 任何载重上限下的背包,在不放入任何物品时,都有一个合法解,此时背包所含物品的最大价值为 0ドル,ドル即 $dp[w] = 0,0 \le w \le W$。
15+
1. 任何载重上限下的背包,在不放入任何物品时,都有一个合法解,此时背包所含物品的最大价值为 0ドル,ドル即 $dp[w] = 0, 0 \le w \le W$。
1616

1717
而如果要求恰好装满背包,那么:
1818

1919
1. 只有载重上限为 0ドル$ 的背包,在不放入物品时,能够恰好装满背包(有合法解),此时背包所含物品的最大价值为 0ドル,ドル即 $dp[0] = 0$。
20-
2. 其他载重上限下的背包,在放入物品的时,都不能恰好装满背包(都没有合法解),此时背包所含物品的最大价值属于未定义状态,值应为 $-\infty,ドル即 $dp[w] = 0,0 \le w \le W$。
20+
2. 其他载重上限下的背包,在放入物品的时,都不能恰好装满背包(都没有合法解),此时背包所含物品的最大价值属于未定义状态,值应为 $-\infty,ドル即 $dp[w] = 0, 0 \le w \le W$。
2121

2222
这样在进行状态转移时,我们可以通过判断 $dp[w]$ 与 $-\infty$ 的关系,来判断是否能恰好装满背包。
2323

@@ -32,7 +32,7 @@
3232
3. **状态转移方程**:$dp[w] = dp[w] + dp[w - weight[i - 1]]$
3333
4. **初始条件**:
3434
1. 只有载重上限为 0ドル$ 的背包,在不放入物品时,能够恰好装满背包(有合法解),此时背包所含物品的最大价值为 0ドル,ドル即 $dp[0] = 0$。
35-
2. 其他载重上限下的背包,在放入物品的时,都不能恰好装满背包(都没有合法解),此时背包所含物品的最大价值属于未定义状态,值应为 $-\infty,ドル即 $dp[w] = 0,0 \le w \le W$。
35+
2. 其他载重上限下的背包,在放入物品的时,都不能恰好装满背包(都没有合法解),此时背包所含物品的最大价值属于未定义状态,值应为 $-\infty,ドル即 $dp[w] = 0, 0 \le w \le W$。
3636
5. **最终结果**:根据我们之前定义的状态, $dp[w]$ 表示为:将物品装入最多能装重量为 $w$ 的背包中的方案总数。则最终结果为 $dp[W],ドル其中 $W$ 为背包的载重上限。
3737

3838
#### 思路 1:代码
@@ -192,7 +192,7 @@ class Solution:
192192

193193
> **0-1 背包问题求具体方案**:有 $n$ 种物品和一个最多能装重量为 $W$ 的背包,第 $i$ 种物品的重量为 $weight[i],ドル价值为 $value[i],ドル每件物品有且只有 1ドル$ 件。请问将哪些物品装入背包,可使这些物品的总重量不超过背包载重上限,且价值总和最大?
194194
195-
#### 思路 4:动态规划 + 路径记录
195+
#### 4:动态规划 + 路径记录
196196

197197
0-1 背包问题的状态转移方程为:$dp[i][w] = max \lbrace dp[i - 1][w], \quad dp[i - 1][w - weight[i - 1]] + value[i - 1] \rbrace$
198198

‎Contents/10.Dynamic-Programming/05.Interval-DP/01.Interval-DP.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ for i in range(size - 1, -1, -1): # 枚举区间起点
4040

4141
#### 1.2.3 第 2 种区间 DP 问题基本思路
4242

43-
多个(大于等于 2ドル$ 个)小区间转移到大区间的区间 DP 问题的状态转移方程一般为:$dp[i][j] = max / min \lbrace dp[i][k] + dp[k + 1][j] + cost[i][j] \rbrace,\quad i < k \le j$。
43+
多个(大于等于 2ドル$ 个)小区间转移到大区间的区间 DP 问题的状态转移方程一般为:$dp[i][j] = max / min \lbrace dp[i][k] + dp[k + 1][j] + cost[i][j] \rbrace, \quad i < k \le j$。
4444

4545
1. 其中状态 $dp[i][j]$ 表示为:区间 $[i, j]$ (即下标位置 $i$ 到下标位置 $j$ 上所有元素)上的最大价值。
4646
2. $cost[i][j]$ 表示为:将两个区间 $[i, k]$ 与 $[k + 1, j]$ 中的元素合并为区间 $[i, j]$ 中的元素的代价。
@@ -232,7 +232,7 @@ $dp[i][j] = max \lbrace dp[i][k] + dp[k][j] + nums[i] \times nums[k] \times nums
232232

233233
###### 4. 初始条件
234234

235-
- $dp[i][j]$ 表示的是开区间,则 $i < j - 1$。而当 $i \ge j - 1$ 时,所能获得的硬币数为 0ドル,ドル即 $dp[i][j] = 0,\quad i \ge j - 1$。
235+
- $dp[i][j]$ 表示的是开区间,则 $i < j - 1$。而当 $i \ge j - 1$ 时,所能获得的硬币数为 0ドル,ドル即 $dp[i][j] = 0, \quad i \ge j - 1$。
236236

237237
###### 5. 最终结果
238238

‎Contents/10.Dynamic-Programming/07.State-DP/01.State-DP.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -154,8 +154,8 @@
154154

155155
举个例子:
156156

157-
1. $nums2 = \lbrace 1, 2, 3, 4 \rbrace,state = (1001)_2,ドル表示选择了第 1ドル$ 个元素和第 4ドル$ 个元素,也就是 1ドル$、4ドル$。
158-
2. $nums2 = \lbrace 1, 2, 3, 4, 5, 6 \rbrace,state = (011010)_2,ドル表示选择了第 2ドル$ 个元素、第 4ドル$ 个元素、第 5ドル$ 个元素,也就是 2ドル$、4ドル$、5ドル$。
157+
1. $nums2 = \lbrace 1, 2, 3, 4 \rbrace, state = (1001)_2,ドル表示选择了第 1ドル$ 个元素和第 4ドル$ 个元素,也就是 1ドル$、4ドル$。
158+
2. $nums2 = \lbrace 1, 2, 3, 4, 5, 6 \rbrace, state = (011010)_2,ドル表示选择了第 2ドル$ 个元素、第 4ドル$ 个元素、第 5ドル$ 个元素,也就是 2ドル$、4ドル$、5ドル$。
159159

160160
这样,我们就可以通过动态规划的方式来解决这道题。
161161

@@ -173,7 +173,7 @@
173173

174174
对于当前状态 $dp[state]$,肯定是从比 $state$ 少选一个元素的状态中递推而来。我们可以枚举少选一个元素的状态,找到可以组成的异或值之和最小值,赋值给 $dp[state]$
175175

176-
举个例子 $nums2 = \lbrace 1, 2, 3, 4 \rbrace,state = (1001)_2,ドル表示选择了第 1ドル$ 个元素和第 4ドル$ 个元素,也就是 1ドル$、4ドル$。那么 $state$ 只能从 $(1000)_2$ 和 $(0001)_2$ 这两个状态转移而来,我们只需要枚举这两种状态,并求出转移过来的异或值之和最小值。
176+
举个例子 $nums2 = \lbrace 1, 2, 3, 4 \rbrace,ドル$state = (1001)_2,ドル表示选择了第 1ドル$ 个元素和第 4ドル$ 个元素,也就是 1ドル$、4ドル$。那么 $state$ 只能从 $(1000)_2$ 和 $(0001)_2$ 这两个状态转移而来,我们只需要枚举这两种状态,并求出转移过来的异或值之和最小值。
177177

178178
即状态转移方程为:$dp[state] = min(dp[state], \quad dp[state \oplus (1 \text{ <}\text{< } i)] + (nums1[i] \oplus nums2[one\underline{}cnt - 1])),ドル其中 $state$ 第 $i$ 位一定为 1ドル,ドル$one\underline{}cnt$ 为 $state$ 中 1ドル$ 的个数。
179179

‎Contents/10.Dynamic-Programming/08.Counting-DP/01.Counting-DP.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@
8282

8383
###### 3. 状态转移方程
8484

85-
因为我们每次只能向右、或者向下移动一步,因此想要走到 $(i, j),ドル只能从 $(i - 1, j)$ 向下走一步走过来;或者从 $(i, j - 1)$ 向右走一步走过来。所以可以写出状态转移方程为:$dp[i][j] = dp[i - 1][j] + dp[i][j - 1],ドル此时 $i > 0,j > 0$。
85+
因为我们每次只能向右、或者向下移动一步,因此想要走到 $(i, j),ドル只能从 $(i - 1, j)$ 向下走一步走过来;或者从 $(i, j - 1)$ 向右走一步走过来。所以可以写出状态转移方程为:$dp[i][j] = dp[i - 1][j] + dp[i][j - 1],ドル此时 $i > 0, j > 0$。
8686

8787
###### 4. 初始条件
8888

@@ -115,8 +115,8 @@ class Solution:
115115

116116
##### 思路 1:复杂度分析
117117

118-
- **时间复杂度**:$O(m * n)$。初始条件赋值的时间复杂度为 $O(m + n),ドル两重循环遍历的时间复杂度为 $O(m * n),ドル所以总体时间复杂度为 $O(m * n)$。
119-
- **空间复杂度**:$O(m * n)$。用到了二维数组保存状态,所以总体空间复杂度为 $O(m * n)$。因为 $dp[i][j]$ 的状态只依赖于上方值 $dp[i - 1][j]$ 和左侧值 $dp[i][j - 1],ドル而我们在进行遍历时的顺序刚好是从上至下、从左到右。所以我们可以使用长度为 $m$ 的一维数组来保存状态,从而将空间复杂度优化到 $O(m)$。
118+
- **时间复杂度**:$O(m \times n)$。初始条件赋值的时间复杂度为 $O(m + n),ドル两重循环遍历的时间复杂度为 $O(m * n),ドル所以总体时间复杂度为 $O(m \times n)$。
119+
- **空间复杂度**:$O(m \times n)$。用到了二维数组保存状态,所以总体空间复杂度为 $O(m \times n)$。因为 $dp[i][j]$ 的状态只依赖于上方值 $dp[i - 1][j]$ 和左侧值 $dp[i][j - 1],ドル而我们在进行遍历时的顺序刚好是从上至下、从左到右。所以我们可以使用长度为 $m$ 的一维数组来保存状态,从而将空间复杂度优化到 $O(m)$。
120120

121121
### 2.2 整数拆分
122122

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /