Unverified Commit aba5cdbb authored by cjsoft's avatar cjsoft Committed by GitHub
Browse files

Merge pull request #903 from 24OI/ir1d/copywriting-correct

 feat: change pangu.js to copywriting-correct.js
parents 6a795b60 d349471f
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -3,12 +3,13 @@
    "listItemIndent": "tab"
  },
  "plugins": [
    "remark-pangu",
    "remark-copywriting-correct",
    "remark-preset-lint-markdown-style-guide",
    ["remark-lint-code-block-style", false],
    ["remark-lint-maximum-line-length", false],
    ["remark-lint-ordered-list-marker-value", "ordered"],
    "remark-math",
    "remark-math-space",
    "remark-lint-final-newline",
    "remark-lint-no-tabs",
    "remark-clang-format"
+2 −2
Original line number Diff line number Diff line
@@ -2,7 +2,7 @@

介绍分治之前,首先要弄清楚递归这个概念。

递归是什么呢?举个简单的例子:从前有座山,山上有座庙,庙里有个老和尚,老和尚给小和尚讲故事:“从前有座山,山上有座庙,庙里有个老和尚,老和尚给小和尚讲故事:‘从前有座山......’” 这个故事与递归算法有着异曲同工之妙。
递归是什么呢?举个简单的例子:从前有座山,山上有座庙,庙里有个老和尚,老和尚给小和尚讲故事:“从前有座山,山上有座庙,庙里有个老和尚,老和尚给小和尚讲故事:‘从前有座山……’”这个故事与递归算法有着异曲同工之妙。

递归的基本思想是某个函数直接或者间接地调用自身,这样就把原问题的求解转换为许多性质相同但是规模更小的子问题。我们只需要关注如何把原问题划分成符合条件的子问题,而不需要去研究这个子问题是如何被解决的。

+6 −7
Original line number Diff line number Diff line
@@ -6,8 +6,7 @@

## 递归

递归的方法是把表达式拆分成如图所示的表达式树,然后在树结构上自底向上进行运算。
![](./images/bet.png)
递归的方法是把表达式拆分成如图所示的表达式树,然后在树结构上自底向上进行运算。![](./images/bet.png)

表达式树上进行[树的遍历](/graph/traverse/#dfs_3)可以得到不同类型的表达式

+3 −3
Original line number Diff line number Diff line
@@ -8,6 +8,6 @@

1.  在动手写代码之前,在草纸上尽可能的写好要实现的流程
2.  在代码中,尽量把每个部分模块化、写成函数、结构体或类
3.  对于一些可能重复用到的概念,可以统一转化,方便处理如,某题给你 "YY-MM-DD 时: 分" 把它扔到一个函数处理成秒,会减少概念混淆
3.  对于一些可能重复用到的概念,可以统一转化,方便处理如,某题给你 "YY-MM-DD 时分" 把它扔到一个函数处理成秒,会减少概念混淆
4.  调试时分块调试,模块化的好处就是可以方便的单独调某一部分
5.  写代码的时候一定要思路清晰,不要想到什么写什么,要按照落在纸上的步骤写。
+6 −6
Original line number Diff line number Diff line
@@ -11,7 +11,7 @@

显而易见的是,可以计算总价值的,只有已经放入背包的物体,因此该题中对 "是否为最大值" 的判断是建立在 "已经放入背包之中" 的基础之上的

已知对于一个容量为 v1,可以放置第 1 到第 i 件物体的背包,其最大总价值很明显等于容量为 v1 的背包,放有第 1 到第 (i-1) 件物体时的最大值 (第 i 件物体不取时) 或者是容量为 v1-v[i]的背包,放有第 1 到第 (i-1) 件物体时的最大值 + w[i](第i件物体取时)
已知对于一个容量为 v1,可以放置第 1 到第 i 件物体的背包,其最大总价值很明显等于容量为 v1 的背包,放有第 1 到第 (i-1) 件物体时的最大值第 i 件物体不取时或者是容量为 v1-v[i]的背包,放有第 1 到第 (i-1) 件物体时的最大值 + w[i](第i件物体取时)

由此可以得出状态转移方程

@@ -24,13 +24,13 @@ for (int i = 1; i <= v1; i++)
  for (int l = 0; l <= v1 - i; l++) dp[l + i] = max(dp[l] + w[i], dp[l + i]);
```

按照正确的思路,写出了这样的核心代码,然后就可以提交......
按照正确的思路,写出了这样的核心代码,然后就可以提交……

错!

让我们再回头看一下代码,i 表示当前判断的是第 i 个物体,l 则穷举体积,可是注意一个地方——l 是从 0 到 v1-v[i]

这意味着什么呢?举个栗子,可能在体积为 (l) 处取物体 i 新的 dp 值存到体积为 (l+v[i]) 处, 而在体积为 (l+v[i]) 处,物体 i 再次被取
这意味着什么呢?举个栗子,可能在体积为 (l) 处取物体 i 新的 dp 值存到体积为 (l+v[i]) 处而在体积为 (l+v[i]) 处,物体 i 再次被取

所以,当以 0~v1-v[i]的顺序穷举时,物体实际上可能被加入多遍,这显然与题意不符

Loading