Loading docs/search/dfs.md +5 −5 Original line number Diff line number Diff line Loading @@ -3,11 +3,11 @@ DFS 为图论中的概念,详见 [DFS(图论)](../graph/dfs.md) 页面。 考虑这个例子: ???+note "例题" 把正整数 n 分解为 3 个不同的正整数,如 6=1+2+3,排在后面的数必须大于等于前面的数,输出所有方案。 把正整数 $n$ 分解为 $3$ 个不同的正整数,如 $6=1+2+3$ ,排在后面的数必须大于等于前面的数,输出所有方案。 对于这个问题,如果不知道搜索,应该怎么办呢? 当然是 3 重循环,参考代码如下: 当然是三重循环,参考代码如下: ```cpp for (int i = 1; i <= n; ++i) Loading @@ -18,15 +18,15 @@ for (int i = 1; i <= n; ++i) 那如果是分解成四个整数呢?再加一重循环? 那分解成小于等于 m 个整数呢? 那分解成小于等于 $m$ 个整数呢? 这时候就需要用到递归搜索了。 该类搜索算法的特点在于,将要搜索的目标分成若干“层”,每层基于前几层的状态进行决策,直到达到目标状态。 考虑上述问题,即将正整数 n 分解成小于等于 m 个正整数之和,且排在后面的数必须大于等于前面的数,并输出所有方案。 考虑上述问题,即将正整数 $n$ 分解成小于等于 $m$ 个正整数之和,且排在后面的数必须大于等于前面的数,并输出所有方案。 设一组方案将正整数 n 分解成 k 个正整数之和,k 个正整数为 $a_1, a_2, \ldots, a_k$ . 设一组方案将正整数 $n$ 分解成 $k$ 个正整数 $a_1, a_2, \ldots, a_k$ 的和。 我们将问题分层,第 $i$ 层决定 $a_i$ 。则为了进行第 $i$ 层决策,我们需要记录三个状态变量: $n-\sum_{j=1}^i{a_j}$ ,表示后面所有正整数的和;以及 $a_{i-1}$ ,表示前一层的正整数,以确保正整数递增;以及 $i$ ,确保我们最多输出 $m$ 个正整数。 Loading Loading
docs/search/dfs.md +5 −5 Original line number Diff line number Diff line Loading @@ -3,11 +3,11 @@ DFS 为图论中的概念,详见 [DFS(图论)](../graph/dfs.md) 页面。 考虑这个例子: ???+note "例题" 把正整数 n 分解为 3 个不同的正整数,如 6=1+2+3,排在后面的数必须大于等于前面的数,输出所有方案。 把正整数 $n$ 分解为 $3$ 个不同的正整数,如 $6=1+2+3$ ,排在后面的数必须大于等于前面的数,输出所有方案。 对于这个问题,如果不知道搜索,应该怎么办呢? 当然是 3 重循环,参考代码如下: 当然是三重循环,参考代码如下: ```cpp for (int i = 1; i <= n; ++i) Loading @@ -18,15 +18,15 @@ for (int i = 1; i <= n; ++i) 那如果是分解成四个整数呢?再加一重循环? 那分解成小于等于 m 个整数呢? 那分解成小于等于 $m$ 个整数呢? 这时候就需要用到递归搜索了。 该类搜索算法的特点在于,将要搜索的目标分成若干“层”,每层基于前几层的状态进行决策,直到达到目标状态。 考虑上述问题,即将正整数 n 分解成小于等于 m 个正整数之和,且排在后面的数必须大于等于前面的数,并输出所有方案。 考虑上述问题,即将正整数 $n$ 分解成小于等于 $m$ 个正整数之和,且排在后面的数必须大于等于前面的数,并输出所有方案。 设一组方案将正整数 n 分解成 k 个正整数之和,k 个正整数为 $a_1, a_2, \ldots, a_k$ . 设一组方案将正整数 $n$ 分解成 $k$ 个正整数 $a_1, a_2, \ldots, a_k$ 的和。 我们将问题分层,第 $i$ 层决定 $a_i$ 。则为了进行第 $i$ 层决策,我们需要记录三个状态变量: $n-\sum_{j=1}^i{a_j}$ ,表示后面所有正整数的和;以及 $a_{i-1}$ ,表示前一层的正整数,以确保正整数递增;以及 $i$ ,确保我们最多输出 $m$ 个正整数。 Loading