# 数字三角形模型
# 方格取数
分析:
因为要走两次,并且走之后会重新更新为 0,所以让两个同时走
如果要同时走,就需要四维,如何优化呢?根据观察,因为两者同时走,所以走的步数是一样的,即,所以可以设置一维是,就优化成了三维
通过判断 是否等于,决定最终要加几次权重
因为 都有可能从上或者左来,所以一共有 4 种状态
状态计算:
(依次表示都从上,i1 从上 i2 从左,i1 从左 i2 从上,都从左)
1 |
|
# 传纸条
方格取数是同向一起走,传纸条是相向先后走,为什么所用的代码是一样的呢?
~
既然答案中的 i1 一定不等于 i2,为什么代码中还要写出来呢?
因为不想交的线是由相交的线得到的,所以相交的线是构成最优的必须过程
1 |
|
# 最长上升子序列
# 合唱队形
分两步:先求以每个节点为结尾的最长上升子序列,再求以每个节点开始的最长下降子序列;最后相加即可
1 |
|
# 拦截导弹
方法一:
- 第一问即求最长不上升子序列的长度
- 第二问要求最少有多少个不上升的子序列,可以(还不会证明 QAQ)
1 |
|
方法二:(第二问)
- 维护一个所有子序列末尾的子弹高度的非递减数组
- 如果新的导弹高度高于现在最高的结尾高度,那就新开一个空间放这个导弹
- 如果新的导弹高度低于现在最高的结尾高度,找到大于它的最小高度,加在这个的后面,并修改最高高度
- 求大于它的最小值,可以使用二分进行优化
1 |
|