main
黄海 1 year ago
parent 8ca1abca0b
commit 481a4153de

@ -4,7 +4,7 @@
**[$AcWing$ $1015$. 摘花生](https://www.acwing.com/problem/content/1017/)**
二维状态表示,双重循环填充二维表,从上或可以转移
二维状态表示,双重循环填充二维表,从上或可以转移
```cpp {.line-numbers}
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
@ -16,26 +16,25 @@
f[i][j] = max(f[i - 1][j], f[i][j - 1]) + w[i][j];
```
初始值
**初始化**
```cpp {.line-numbers}
f[1][1] = w[1][1]; //出发点
```
**状态表示**
$f[i][j]$代表走到第$(i,j)$个位置时可以获取到的最大数量和
**状态表示**
$f[i][j]$:走到第$(i,j)$个位置时可以获取到的最大数量和
**状态转移**
$f[i][j]$可以从哪些状态转移而来
**状态转移**
$f[i][j]$可以从哪些状态转移而来,答:从上方或左方过来
**初始值**
思考起点状态表示的现实含义即可
**初始值**
思考起点状态表示的现实含义
**总结**
① 动态规划需要按上面的三步走,而最难的是状态表示,状态转移还好,根据题意可以推出相应的转换关系。状态表示一般是通过 **经验**,对,是 **经验**。
① 动态规划需要按上面的三步走,而最难的是状态表示,状态转移还好,根据题意推出相应的转换关系。状态表示靠 **经验**,对,是 **经验**。
② 初始值:不一定非得放在循环外进行初始化,也可以合并在循环内,有时放在循环内初始化反而更方便更直接。
③ 可以使用一维表示,但我个人理解不如二维的直观,最起码思路应该是先有两维再缩成一维,而不是上来就直接一维。一般的题目不会对内存有严格的限制,能用二维还是二维吧,实在卡内存再考虑降为一维。
② 初始值:放在循环内初始化更直接
③ 一维状态表示,我理解不如二维直观,最起码思路应该是先有两维再缩成一维,而不是上来就直接一维。一般的题目不会对内存有严格的限制,能用二维还是二维吧,实在卡内存再考虑降为一维。
**[$AcWing$ $1018$. 最低通行费](https://www.acwing.com/problem/content/1020/)**
与上一题基本一样,只不过是变换了下,需要你用思维转一下:$2n-1$次,就是说只能向下或向右,否则次数就不达标了。还有一点,就是需要求最小值,而不是最大值,其它的没区别

Loading…
Cancel
Save