main
黄海 1 year ago
parent 481a4153de
commit 133bb2bb88

@ -0,0 +1,17 @@
## $LIS$+$LCS$专题
#### 基础题
[AcWing 895. 最长上升子序列](https://www.acwing.com/problem/content/897/)
[AcWing 896. 最长上升子序列 II ](https://www.acwing.com/problem/content/898/)
[AcWing 897. 最长公共子序列](https://www.acwing.com/problem/content/899/)
#### 进阶题
AcWing 1017. 怪盗基德的滑翔翼
AcWing 1014. 登山
AcWing 482. 合唱队形
AcWing 1012. 友好城市
AcWing 1016. 最大上升子序列和
AcWing 1010. 拦截导弹
AcWing 187. 导弹防御系统
AcWing 272. 最长公共上升子序列

@ -37,7 +37,7 @@ $f[i][j]$可以从哪些状态转移而来,答:从上方或左方过来
③ 一维状态表示,我理解不如二维直观,最起码思路应该是先有两维再缩成一维,而不是上来就直接一维。一般的题目不会对内存有严格的限制,能用二维还是二维吧,实在卡内存再考虑降为一维。
**[$AcWing$ $1018$. 最低通行费](https://www.acwing.com/problem/content/1020/)**
与上一题基本一样,只不过是变换了下,需要你用思维转一下:$2n-1$次,就是说只能向下或向右,否则次数就不达标了。还有一点,就是需要求最小值,而不是最大值,其它的没区别
与上一题基本一样,只不过是变换了下,需要你用思维转一下:$2n-1$次,就是说只能向下或向右,否则次数就不达标了。还有一点,求最小值,而不是最大值,其它的没区别
```cpp {.line-numbers}
//初始化为最大值
memset(f, 0x3f, sizeof f);
@ -61,12 +61,17 @@ for (int i = 1; i <= n; i++)
解决办法就是把两次一起考虑,转化为有两个小人一起走,步调一致,此时两个相亲相爱,互相照顾,白头偕老,皆大欢喜:
状态表示也就呼之欲出:
**状态表示**
① 两个坐标共同决定了现在的状态,换句话说,状态和上面的两个坐标都是相关的
② 当你发现一维不足以表示当前状态时,考虑扩二维,二维不行再考虑扩三维,以此类推。
$f[x_1][y_1][x_2][y_2]$表示第1个人走到$(x_1,y_1)$,第2个人走到$(x_2,y_2)$,但需要保证$x_1+y_1=x_2+y_2$
**状态转移**
① 如果两个人走到同一个位置,就可能加上一次这个位置上的数
② 如果两个人走到不同的位置,就可以加上两个地方上的数
③ 两个坐标共同决定了现在的状态,换句话说,状态和上面的两个坐标都是相关的
```cpp {.line-numbers}

Loading…
Cancel
Save