DP:子序列模型

3、子数组必须连续,子序列可以不连续

算法原理:

1、状态表示(经验+题目要求)

dp[i]表示以i位置为结尾所有子系列中,最长递增子序列的长度。

2、状态转移方程

(1)长度为1——>dp[i]=1

(2)长度大于1——>满足前提(nums[j]max(dp[j]+1,dp[i])(0<=j<=i-1)

3、初始化

如果无法更新,最差情况自己也是一个子序列,所以dp表全都初始化为1

4、填表顺序

需要借助前面的状态,所以要从左往右

5、返回值

dp表中的最大值——>可以用ret去更新出最大值,也可以用*max_element(dp.begin(),dp.end())

6、复杂度

空间复杂度:N

dp[i]表示以i位置为结尾所有子序列中,最长递增子序列的长度。(错误)

因为会存在两种状态,所以我们需要两个dp数组:

f[i]表示以i位置为结尾的所有子序列中,最后一个位置呈现“上升”趋势的最长摆动序列的长度

g[i]表示以i位置为结尾的所有子序列中,最后一个位置呈现“下降”趋势的最长摆动序列的长度

f[i](上升):

(1)长度为1——>1

(2)长度大于1——>满足前提(nums[j]max(g[j]+1,f[i])(0<=j<=i-1)

g[i](下降):

(2)长度大于1——>满足前提(nums[j]>nums[i])——>max(f[j]+1,g[i])(0<=j<=i-1)

如果无法更新,最差情况自己也是一个子序列,所以g表和f表全都初始化为1

需要借助前面的状态,所以要从左往右,两个表一起填

两个表中的最大值

在讲解前先来个小demo:如何在数组中找出最大值出现的次数

方案1:第一次for循环确定最大的值是多少,第二次for循环统计最大的值出现了几次

方案2:利用贪心策略一次for循环搞定(定义maxval记录当前的最大值,count统计数量)

(1)x==maxval:++count

(2)x

(3)x>maxval:更新最大值——>maxval=x,然后重新计数——>count=1

dp[i]表示以i位置为结尾所有子序列中,最长递增子序列的个数。(错误)

因为我们在填表的时候并不能确认最长递增子序列的长度是多少,所以无法直接统计。我们就得用demo中的方案2的思想,来解决这个问题。

len[i]表示以i位置为结尾的所有子序列中,最长递增子序列的“长度”

count[i]表示以i位置为结尾的所有子序列中,最长递增子序列的“个数”

nums[j]

(1)len[j]+1==len[i]——>count[i]+=count[j]

(2)len[j]+1

(3)len[j]+1>len[i]——>len[i]=len[j]+1count[i]=count[j](更新最大值并重新计数)

全都初始化为1

recount统计结果

预处理:由于题目要求是任意顺序组成数链对,所以我们在处理的时候不仅要考虑前面,还要考虑后面,这样不利于我们的动态规划表示,所以我们要先按照第一个元素进行排序(比如[a,b][c,d],aa,所以后面的不需要考虑到),我们要进行sort,在C++中,vector、pair的默认比较逻辑都是按照字典序的,恰好符合我们的要求,所以我们可以直接调用sort。

dp[i]表示以i位置为结尾所有数对链序列中,最长数对链的长度。

dp[i]:

(1)长度为1——1

(2)长度大于1——p[j][1]>p[i][0]——max(dp[i],dp[j]+1)

初始化为1

要返回dp表中的最大值,但由于我们排序过,所以最大值必然出现在dp[n-1]。

dp[i]表示以i位置为结尾所有子序列中,最长的等差子序列长度

(1)b不存在——>1

(2)b存在——>取最后一个即可dp[j]+1

我们会发现前一个数基本上是可以确定是多少的,并且有多个的话也可以用后面的覆盖前面的,因此我们可以用哈希表做优化

优化思路:

(1)将元素+dp[i]的值存在哈希表中

(2)直接在哈希表中做动态规划

hash[arr[0]]=1

从左往右

dp表里的最大值

dp[i]表示以i位置为结尾所有子序列中,最长的斐波那契子序列长度(错误)。

因为我们至少得确定两个位置,才能知道序列是否满足斐波那契子序列的要求。

dp[i][j]表示以i位置及j位置为结尾所有子序列中,最长的斐波那契子序列长度。

dp[i][j]:(假设abc对应的坐标分别是kij)

(1)如果a存在且adp[k][i]+1

(2)a存在且b2

(3)a不存在——>2

优化思路:将元素与下标绑定存放在哈希表中。

都初始化为2

dp表里的最大值ret但是如果ret是2的话就返回0

dp[i]表示以i位置为结尾所有子序列中,最长的等差子序列的长度(错误)。

因为我们至少得确定两个位置,才能知道序列是否满足等差子序列的要求。

dp[i][j]表示以i位置及j位置为结尾所有子序列中,最长的等差子序列长度。

(1)将元素与下标绑定存放在哈希表中。

(2)i位置填完后,将i位置的值放进哈希表中

有两种方式(选择方法2)

(1)先固定最后一个数,然后枚举倒数第二个数(必须在dp前先将元素与下标的关系绑定再哈希表中,到时候在找的时候还得判断b

(2)先固定倒数第二个数,再枚举最后一个数(可以等i位置填完后再将i的位置丢进哈希表,这样可以保证哈希表内的元素的下标必然是小的,就可以不需要判断b

dp表里的最大值ret

(1)如果a存在且adp[i][j]+=dp[k][i]+1

(2)a存在且b0

(3)a不存在——>0

(1)将元素与下标绑定存放在哈希表中。(该题需要统计所有的子序列,所以相同元素下标不同的情况都要统计,因此我们要将元素绑定一个下标数组)

都初始化为0

先固定倒数第二个数,再枚举最后一个数(可以等i位置填完后再将i的位置丢进哈希表,这样可以保证哈希表内的元素的下标必然是小的,就可以不需要判断b

THE END
1.动态规划算法斐波那契数列模型2.状态转移方程: 以i位置最近的一步来划分问题,对于dp[i],可以 从i-1级台阶跳一步上来,也可以从i-2ji级台阶跳两步上来,也可以从i-3级台阶跳三步上来。故有: dp[i] = dp[i-1] + dp[i-2] + dp[i-3],即到第i级台阶的方法是到 i-1,i-2, i-3级台阶的方法总和。 https://blog.csdn.net/m0_59464874/article/details/144003890
2.sqlserver某列的值是某列前面几行到该行的累加3. 4. 5. 6. 7. /*MySQL、SQL Server、Oracle等数据库支持CONCAT方法, 而本题所用的SQLite数据库只支持用连接符号"||"来连接字符串 CONCAT方法: select CONCAT(CONCAT(last_name," "),first_name) as name from employees 或者 select CONCAT(last_name," ",first_name) as name from employees https://blog.51cto.com/u_12227/12670382
3.ONE·基础算法动态规划(二)用一个变量记录历史的最小前缀和,在求第j个位置的前缀和时,与历史前缀和做差。 classSolution{public:intmaxSubArray(vector<int>&nums){intmin_sum=0;//维护一个最小前缀和intsum=0;//用于统计当前前缀和intret=-0x3f3f3f;// 返回for(auton:nums){sum+=n;//获取当前前缀和ret=max(ret,sum-http://www.mynw.cn/server/18206.html
4.C++刷题优选算法——动态规划第一辑2.状态转移方程dp[i]=细节问题:3.初始化控制填表的时候不越界4.填表顺序控制在填写当前状态的时候,所需要的状态已经填写好了5.返回值题目要求+状态表示空间优化滚动数组 第N 个泰波那契数 inttribonacci(intn){// 处理一些边界情况if(n<3){if(n==0)return0;elsereturn1;}// 1.创建dp表vector<int>http://www.mqxn.cn/news/62252.html
5.排列三数字累加走势图彩票走势图当前遗漏期数 30 4 12 1 6 0 14 13 3 5 0 0 3 0 1 0 3 1 4 0 3 0 4 7 13 0 2 6 5 11 3 4 30 参数说明: 体彩排列三数字累加走势图提供排列3开奖号码数字累加走势分布 数字累加:开奖和值数字的再相加,直到加到只有一个数为止。例:开奖号679 和值为22 2+2=4 数字累加值为4 质数:01http://www.78500.cn/zs/p3/szlj.html
6.排列3和值走势图3d走势图带连线2024223 549 1991 442 360 6 51 2 26 18 42 72 9 19 5 3 10 13 11 4 18 12 7 1 8 147 216 68 241 1920 大 2 1 偶 2 合 0 3 2 大 3 2 1 15 降 1 3 C 5 1 2 6 2 1 4 3 10 0 3 7 1 8 2 1 8 11 4 4 2 3 11 4 2 6 5 1 8 13 0 9 7 1 3 2 13 11 4https://tools.17500.cn/tb/p3/hezhi?limit=30
7.创业融资终极指南:3万字讲透创业公司融资所有内容云杉思库由于天使团体通常几乎没有什么优势,但投资的复杂性又增加,有看法认为越来越多的天使网络会走辛迪加的路线找出你的理想客户。没有所谓的大众市场产品或问题。试图取悦所有人,到头来谁也取悦不了。 第3 部分:让VC无法忽视的杀手级创业Pitch Deck! 现在,如果你准备好了,让我们继续这个程序。 https://www.shangyexinzhi.com/article/4700200.html
8.时间序列基础1)纯随机过程:随机变量X(t)(t=1,2,3……),如果是由一个不相关的随机变量的序列构成的,即对于所有s不等于k,随机变量Xs和Xk的协方差为零,则称其为纯随机过程。 2)白噪声过程:如果一个纯随机过程的期望和方差均为常数,则称之为白噪声过程。白噪声过程的样本实称成为白噪声序列,简称白噪声。 https://www.jianshu.com/p/ab345ac4484b
9.排列三走势图排列三走势图带连线P3走势图295 326 552 12 1 1 2 3 2 5 6 1 7 8 296 068 898 25 2 2 1 4 3 1 7 2 8 9 297 055 037 10 0 3 2 3 4 2 8 7 1 1 298 522 680 14 0 4 3 1 5 3 6 1 8 2 299 534 581 14 1 1 4 2 6 5 1 2 8 3 300 387 933 15 2 1 5 3 7 1 2 3 1 9 301 509 877https://m.55128.cn/zs/2_14.htm
10.www.xm▲Analee说要是当初Tina跟她走得近,她早就发现Tina是个冒牌货了,Tina也知道她的厉害,所以才一直跟她因为婚礼上,Tina说有3栋Vinshome第9区的物业,用20%折扣卖给阮家人。而阮家只要打个5%折扣的价格挂牌包装自己费用都是借的高利贷,比如借10亿越南盾的钱,10%利息,没还清本息前,利息每周都会自动累加,属于http://www.xm-brand.com/xxxr35188766
11.Awesome? KMP 算法就是在试图寻找一种规律:在模式串和主串匹配的过程中,当遇到坏字符后,对于已经比对过的好前缀,能否找到一种规律,将模式串一次性滑动很多位i =L; j = R; 将基准数挖出形成第一个坑a[i]。 2. j--由后向前找比它小的数,找到后挖出此数填前一个坑a[i]中。 https://github.com/Ty-Chen/Awesome-Backend/blob/5ad253a0f2e82d9b83892a60e01a1e0a855d70b3/Data%20Structure%20and%20Algorithm.md
12.ANSYSFLUENT16.0超级学习手册第4章:后处理方法。介绍了3种对FLUENT结果文件进行后处理的途径:FLUENT内置后处理、Workbench CFD-Post通用后处理器及Tecplot后处理软件,详细介绍了运用这些途径进行可视化图形处理、渲染以及图表、曲线和报告的生成方法。 第5章:FLUENT中常用的边界条件。首先对FLUENT中提供的各种边界条件进行了分类,接着阐述了FLUENT中流https://www.epubit.com/bookDetails?id=N31288
13.与交强险相关的若干法律实务问题的探析由于交强险制度是我国第一个由国家法律规定实行的强制保险制度,处于雏形,缺乏行之有效的配套规定,各地法院对保险公司的诉讼地位、法律责任、赔偿顺序等理解不一,导致处理结果大相径庭。本文试图从交强险制度的立法背景、性质及其功能入手,对与交强险相关的若干法律实务问题进行探析,以期对促进司法统一有些许贡献。https://www.chinacourt.org/article/detail/2016/06/id/1892931.shtml