diff --git a/GGB学习/内切圆.ggb b/GGB学习/内切圆.ggb index eccd174..9b0fb17 100644 Binary files a/GGB学习/内切圆.ggb and b/GGB学习/内切圆.ggb differ diff --git a/GGB学习/圆弧的绘制.ggb b/GGB学习/圆弧的绘制.ggb new file mode 100644 index 0000000..284f525 Binary files /dev/null and b/GGB学习/圆弧的绘制.ggb differ diff --git a/GGB学习/圆弧轨迹.ggb b/GGB学习/圆弧轨迹.ggb new file mode 100644 index 0000000..688d6fa Binary files /dev/null and b/GGB学习/圆弧轨迹.ggb differ diff --git a/GGB学习/学习资料.txt b/GGB学习/学习资料.txt new file mode 100644 index 0000000..8ee1fa3 --- /dev/null +++ b/GGB学习/学习资料.txt @@ -0,0 +1 @@ +https://mp.weixin.qq.com/s?__biz=MzIwMzUyNTU4OA==&mid=2247486050&idx=1&sn=52183a67416c516a17cadcd479a2394a&chksm=96cf56d9a1b8dfcf7c4861b9e34d63962c2f6fbcf6b9390a8408f3599c043b111e15073d24ed&scene=27 \ No newline at end of file diff --git a/TangDou/AcWing/NumTriangle/1015.md b/TangDou/AcWing/NumTriangle/1015.md index 09b6bac..75d3cb8 100644 --- a/TangDou/AcWing/NumTriangle/1015.md +++ b/TangDou/AcWing/NumTriangle/1015.md @@ -48,16 +48,22 @@ $1≤T≤100,1≤R,C≤100,0≤M≤1000$ ### 二、$DP$分析 **状态表示** -$f[i][j]$: 所有从$(1,1)$ 走到 $(i,j)$的路线 中 **花生数量之和** **最大值** +$f[i][j]$: 小猫可在出现的每个位置$(x,y)$, **策略**:面向答案编程, +从$(1,1)$走到$(x,y)$有多条路线,我们设$f(x,y)$为所有路线中 **花生数量之和** **最大值** **状态转移** $$\large f[i][j]=max(f[i-1][j],f[i][j-1])+w[i][j]$$ +**填充顺序** +观察状态转移方程,发现: +① 由于是一个二维状态表示,所以可以理解为是一个二维表,需要对二维表进行数据填充。 +② 第$i$行依赖第$i-1$行,第$j$列,依赖$j-1$列,所以,考虑从上到下,从左到右,就是先处理$i,j$中小的,再处理大的,可以形成递推依赖。 + **初始值** 观察状态转移方程,知道$f[1][1]=w[1][1]$ **答案** -$f[n][m]$ +最终我们要计算的是在东南角时可以获取到的最多花生数,即$f[n][m]$。 ### 三、二维$DP$写法 @@ -97,7 +103,7 @@ int main() { ``` -### 四、一维数组写法 +### 四、一维$DP$写法 从二维降一维时,发现每个数据,只依赖于它上一行的同列数据,和同一行的左侧数据,也就是可以概括为依赖于 **左+上**。而采用一维进行记录状态时,$f[i-1]$表示的是$f[i]$的左侧供给数据,$f[i]$描述的是上一行的同列供给数据,两者$PK$就可以覆盖掉当前值。 @@ -159,6 +165,8 @@ int main() { return 0; } ``` +不使用记忆化的深搜是不可以原谅的,速度太慢!究其原因应该是存在大量重复计算,比如$dfs(3,5)$,每次都计算一遍,性能要是好了就怪了,也就是说,我们如果想要使用$dfs$,就一定要思考使用数组完成记忆化,否则就别用。 + ### 六、深搜+记忆化 ```cpp {.line-numbers} #include