From 1e26fc459bd8ecc87c13cbc5389109cfe2a82b67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E6=B5=B7?= <10402852@qq.com> Date: Mon, 4 Mar 2024 15:46:52 +0800 Subject: [PATCH] 'commit' --- TangDou/AcWing_TiGao/T1/LIS/187.cpp | 6 ++++-- TangDou/AcWing_TiGao/T1/LIS/187.md | 13 ++++++------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/TangDou/AcWing_TiGao/T1/LIS/187.cpp b/TangDou/AcWing_TiGao/T1/LIS/187.cpp index 308e522..4719ebf 100644 --- a/TangDou/AcWing_TiGao/T1/LIS/187.cpp +++ b/TangDou/AcWing_TiGao/T1/LIS/187.cpp @@ -19,7 +19,7 @@ int res; void dfs(int u, int ul, int dl) { if (ul + dl >= res) return; // 伟大的剪枝,不剪枝会TLE~,中途发现已经大于等于res的情况,就返回 if (u == n) { // 走完全程,收集答案 - res = ul + dl; // 因为上面的剪枝,把ul+dl>=res的全干掉了,能到这里的,都是从问题的解出发,最终问题的答案是有许多单调上升子序列和许多单调下降子序列,对于每个数,思考分别将该数放到上升序列中还是下降序列中,不断走二叉树的不同分支** +**从问题的解出发,最终问题的答案是有许多单调上升子序列和许多单调下降子序列,对于每个数,思考分别将该数放到上升序列中还是下降序列中,不断走二叉树的不同分支**。 #### 3、题解 @@ -67,13 +67,12 @@ $up[]$ 存储当前**所有上升子序列的末尾元素** $down[]$ 存储当前**所有下降子序列的末尾元素** -**$Q$:如何进行搜素** +**$Q$:如何进行搜索?** -假设现在要把一个数放入一个上升序列,那么一定是所有能放入的上升序列中,**最后一个元素最大的那一个**。 +假设现在要把一个数放入一个上升序列,那么一定是 **所有能放入的上升序列中,最后一个元素最大的那一个**。 -**理由**:既然每个数字都要放到一个序列中,对于上升序列,肯定是目前越小越有用,既然能放入大的里面,何必浪费一个小的呢。 - -**注意**:$up[i]$按这种策略已经是排好序的了,所以只用找最先碰到的一个就行了 +> **理由**:既然每个数字都要放到一个序列中,对于上升序列,肯定是目前越小越有用,既然能放入大的里面,何必浪费一个小的呢。 +> **注意**:$up[i]$按这种策略已经是排好序的了,所以只用找最先碰到的一个就行了 ### 三、$dfs$实现代码 时间$O(n*2^n)$ 空间$O(n)$