那么第一种最长不升子序列的方法难道就不能过了吗?我们可以用二分来优化它 令我们读入的数据存在数组a[]中,再多开一个数组c[],c[len]表示长度为 len 的最大不升(不降)子序列。(为了方便,下面只讨论最大不升子序列,另一个同类) 假设数据为5 8 1 2 5 6 6,首先5存入c[]中并且len+1,接下来8>c[...
b[i]表示长度为i的最长上升子序列中末尾元素的最小值,b[i]单调增(用二分的条件,这个东西要证明) #include<iostream> using namespace std; const int N = 100010; int a[N]; int b[N]; int n; int main(){ cin >> n; for(int i = 0; i < n; i ++) cin >> a[i]; int len = 0...
定位插入位置:首先,通过二分查找或线性查找找到新元素在序列中的插入位置,以保持序列的有序性。这一步的时间复杂度取决于查找方法的选择。 更新dp数组:从插入位置开始,向后遍历序列,更新dp数组的值。对于每个遍历到的元素A[i],我们需要比较新元素与A[i]的大小关系。如果新元素小于A[i],则dp[i]的值不变;如果新...
二、教学内容 本节课的教学内容主要包括以下几个部分: 7.最长上升子序列的定义及其性质。 8.动态规划算法的基本思想及其在解决最长上升子序列问题中的应用。 9.动态规划算法的实现及其优化。 具体来说,我们将从以下几个方面进行讲解: 10.引入最长上升子序列的概念,通过举例让学生理解其含义。 11.讲解动态规划算法...