解题思路:利用动态规划,确定出到每一个数字的时候,所对应的dp[i]为多少
dp[i]表示为在第i个数字时,前i个数字能组成的最长不下降子序列的长度
例如给出一个数列: 1 3 5 2 8 7
dp[4]=4(注意i为下标,数字8对应的下标为4,通过观察,到达数字8时,所能够构成的最长不下降子序列为 1 3 5 8,即长度为4)而我们需要用代码去实现这个过程
找出dp[i]的转移特性方程——当我们给出的序列长度为1时,那么我们的dp[i]=dp[1]=1,只有这唯一的结果,当我们输入的序列长度大于1时,初始化所有的dp[i]为1(因为我们可以将数列的每一位都当成是一个不下降子序列,长度为1,不过我们需要找出的是最长的不下降子序列)
直接上代码(语法类的问题可以去菜鸟教程搜寻)
通过两个for循环依次找到第i个数字的前j个数字组成的序列中,最长不下降的子序列为多少
第一次写题解QAQ(如有不对的地方请指正谅解
注意事项:
对于有些特定的题目,dp数组需要提前定义好长度,以防止数组越界,本题中寻找某个数字的最长上升序列时,就需要找到该数字前一项的最长上升序列
代码中的#include<algorithm>没有用上,故可以不写,在最核心的比较部分,也可以使用algorithm中的max函数进行比较。
参考代码:
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复