算法:递归解序列中最长递减子序列

解题笔记(34)——求最长单调递减子序列 问题描述:求一个数组的最长递减子序列 比如{9,4,3,2,5,4,3,2}的最长递减子序列为{9,5,4,3,2}。       思路:这是很经典的一个问题,用动态规划解决。假设源数组为A,定义一个辅助数组为B,B[i]表示以A[i]结尾的最长递减序列的长度。举个简单 阅读详情
递归编程很简洁,关键是:
1)做好抽象,要把问题分解为递归的问题
2)找到准确的程序终止条件

下面是求最长递减序列的递归算法:如果不在递归中传送参数,问题还是不好解决的,参数的意义就是,返回子最长序列的最小的顶元素


#include <iostream>
using namespace std;

#define MAX_COUNT 7
int a[] = { 5,10,1,6,8,7,4 };

int F(int value,int start, int *min) { // 返回值: ( value, a[start], a[start+1],...,a[MAX_COUNT-1] ) 中最长递减序列的长度,其中 min 为返回序列的第一个元素(是序列的最大值,但是可选择元素中的最小值)

int F(int value,int start, int *min) {
    if ( start == MAX_COUNT ) {  // 递归结束条件
        *min = value;
        cout << *min << ",";
        return 1;
    }

    int pas;
    int a1 = F( a[start],start+1,&pas); // 去掉 value 序列的递归调用

    // 考虑加入当前元素后的情况
    if (value > pas) { 
        a1+=1;
        *min = value;
        cout << *min << ",";
    }
    else {
        *min = pas;
    }

    return a1;
}

int main() {
    cout << "!!!LongestDecent!!!" << endl;
    int min;
    int longestDecent = F(a[0],1, &min);
    cout << endl;
    cout << "LongestDecent: " << longestDecent << " min:" << min << endl;

    return 0;
}


二维数组中的最长递减子序列 给定一个如下的二维数组a[][] 1   3   5   7   4 2   1   8   6   5 4   0  -1  -2   6 求其中的最长递减子序列:7, 5, 3, 1, 0, -1, -2,长度为7。子序列只能朝向上下左右四个方向,不能朝对角线方向。 思路: 该题一看感觉可以用动态规划做,但是下标不确定从哪里开始算起,因为有上下左右四个方向,没有办法顺序计算。只有用 阅读详情

相关推荐

动态规划--寻找最长递减子序列

昨天C++课上留了三道题,做出来平时

MU的BLOG 3384

《算法导论》第四章-矩阵乘法的Strassen算法(含C++代码)

本文为《算法导论》第四章-4.2-矩阵乘法的Strassen方法笔记,欢迎大家参考。

Toby的博客 2927

求数组的最长递减子序列

给定一个整数序列,输出它的最长递减(注意不是“不递增”)子序列。输入包括两行,第一行包括一个正整数N(N<=1000),表示输入的整数序列的长度。第二行包括用空格分隔开的N个整数,整数范围区间为[-30000,30000]。输出为一行,最长递减子序列的结果,数字间用空格分隔(测试case中只会有一个最长递减子序列)。样例输入8 9 4 3 2 5 4 3 2 样例输出9 5 4 3 2经典的dp

小明的博客 5520

算法导论-第4章-分治法

回忆 在2.3.1中,归并排序使用了分治法。在分治法中,当递归地求解一个问题,在每层递归中执行如下三步骤: 分解(Divide):将问题划分为子问题,子问题的形式与原问题一样,只是规模更小。 解决(Conquer):递归地求解出子问题。如果子问题的规模足够小,则停止递归,直接求解。 合并(Combine):将子问题的解组合成原问题的解。 递归情况(recursive case):子问题足够大,需要递归求解。 基本情况(base case):子问题足够小,可以直接求解,不再需要递归。 前言 本章中介绍三个

优快云博客 664

最长递减子序列问题

最长递减子序列的求解,可能在目标检测,工程计数等实际场景中使用,我们一块来看看怎么做

shiter编写程序的艺术 1534

算法导论第四章答案

算法导论第四章答案算法导论第四章答案算法导论第四章答案算法导论第四章答案

最长递减子序列

/* 最长递减子序列 如果Array[i]>aArray[j]      第i个数的最长递减子序列的长度   等于      i+1到最后一个数的最长递减子序列的长度  加  1 否则  最长递减子序列的长度就是1; 最后一个数的最长递减子序列的长度等于1,最开始的时候dp[i]的值都为1; 然后倒着求最长递减子序列 如   3,8,7,5,4,6,3,9 dp[0]=1,dp[1]

lmy1097414666的博客 1046

【软件安装系列】Ubuntu+mysql5.7.27+Jira8.3.1+邮箱服务器配置+Confluence6.15.7安装经验和采坑总结

文章目录一、软件准备(百度云易被吞,就不放了)1.1 官网下载的新鲜的Jira和Confluence1.2 linux的jdk一份1.3 Jira和Confluence的破解程序或者破解包一份1.4 java的连接器一份二、安装过程1--java环境配置2.1 将下载下来的jdk包解压在/usr/local/java目录中2.2 写入环境变量三、安装过程2--mysql5.7.27环境配置3.1 ...

xiaosha_的博客 6893

《算法导论》第四章——分治策略

第四章——分治策略 求解递归式的方法 代入法:我们猜测一个界,然后用数学归纳法证明这个界是正确的。 递归树法:将递归式转换为一棵树,其结点表示不同层次的递归调用产生的代价。然后采用边界和技术来求解递归式。 主方法 最大子数组问题 ...

microsteve的博客 403

从零开始VCS+Verdi 安装过程

从零开始VCS+Verdi 安装及破解过程 主要参考:VCS+Verdi 安装及破解过程(CentOS7)-----FPGA开发 1. 安装文件结构 –vcs-mx_vL-2016.06 –verdi_vL-2016.06-1 –scl_v11.9 #此程序统一管理license等破解文件 –SynopsysInstaller.rar #此程序用于安装以上3个程序 –sc...

Ztrans的博客 2万+

【拯救C盘】一文搞懂Windows修改Anaconda默认的虚拟环境存放路径及其原理

Anaconda创建的虚拟环境可能会默认保存在C盘,但C盘的存储空间很宝贵,由于每个虚拟环境的大小可能达到n个GB,稍不注意就会遇到C盘红色警告。因此有必要做点什么来拯救被虚拟环境占用的大部分空间!!!

Roach007的博客 3万+

最长单调递减子序列

问题描述:求一个数组的最长递减子序列 比如{9,4,3,2,5,4,3,2}的最长递减子序列为{9,5,4,3,2}。 思路:这是一个标准的动态规划的问题,在不理解算法的时候,最感觉可以使用递归的思想,其实也是正确的,在最后给出一个递归的方法,在知道是动态规划问题以后,就需要进行分析,我们需要一个辅助数组记录信息,假如源数组为src,辅助数组为table,table[i]数组中记录着到src

鱼思故渊的专栏 2804

电子硬件仿真:设计一个频率范围为10k—50k的带通滤波器

带通滤波器是一种常用的滤波器类型,具有选择特定频率范围内信号的能力,并在该范围内提供一定的增益。它允许通过一定范围内的频率信号,并在该范围内提供一定的增益,同时在该范围之外的频率上提供较高的衰减。这意味着在通带内(10kHz至50kHz),滤波器的增益应为10dB,而在每个十倍频的频率点上,滤波器的增益应降低40dB。设计滤波器:使用滤波器设计工具(如MATLAB、Python的scipy库、Tina软件等),根据选定的滤波器类型(例如巴特沃斯滤波器),中心频率和通带宽度,设计一个4阶带通滤波器。

走向CTO的路上... 579

算法习题47:求一个数组的最长递减子序列 比如{9,4,3,2,5,4,3,2}的最长递减子序列为{9,5,4,3,2}

创新工场: 求一个数组的最长递减子序列 比如{9,4,3,2,5,4,3,2}的最长递减子序列为{9,5,4,3,2} ------------------------------------------------------ http://blog.youkuaiyun.com/wumuzi520/article/details/7378306 这题参见上面这篇博客的动态规划的方法,可以迅速解

ylf13的专栏 1953

RK3588开发笔记-5G模块(SIM8200、广和通FM160、移远RM500U)调试笔记

RK3588 CPU提供了丰富的外设接口,本文主要介绍通过usb3.0接口驱动5G模块来实现5g无线数据传输功能。在物联网和边缘计算领域,5G网络支持的高速率、低延时连接为应用带来了更多可能性。RK3588作为一款高性能SoC,适合用于5G联网应用。SIM8200广和通FM160和移远RM500U。在RK3588上调试5G模块可以为设备提供稳定的高速联网能力。本文介绍了如何配置和调试SIM8200、广和通FM160和移远RM500U模块,通过AT指令和QMI/MBIM工具实现5G数据连接。

flypig has a dream! 2671

133、神经渲染与AI RAW:从RAW域到sRGB的端到端学习

去年在调试某款旗舰手机的主摄时,遇到一个让人头疼的问题——夜景模式下,暗部细节虽然保留得不错,但色彩总是偏紫,而且高光边缘有诡异的“水彩感”。ISP的3A统计跑了几十版,降噪强度从0调到100,甚至把去马赛克算法换成了自适应方向插值,问题依旧。后来团队里一位做AI的同事说:“要不试试端到端?从RAW直接出sRGB。”当时我第一反应是“这玩意儿能稳定吗?”结果试了一版,偏紫消失了,高光边缘的伪影也没了。从那以后,我开始认真研究神经渲染与AI RAW这条路线。

sundong_81的博客 33

数组的最长递减子序列java_最长递增/递减子序列

《编程之美》里有个题目是要求数组中最长递增子序列,在优快云上看到的题目是数组中的最长递减子序列。题目如下:求一个数组的最长递减子序列比如{9,4,3,2,5,4,3,2}的最长递减子序列为{9,5,4,3,2}求一个数组的最长递增子序列比如{1,-1,2,-3,4,-5,6,-7}的最长递减子序列为{1,2,4,3,6}最长递增序列和最长递减子序列的解法是一样的,最不济,也可以先revert,求...

weixin_36236774的博客 1069

Codex 100个真实案例 - 用AI生成Blender 3D建模脚本(建模师要失业了?)

本案例将展示如何用 Codex 生成 Blender Python API(bpy)脚本,自动创建完整的 3D 模型。我们将从基础几何体开始,逐步实现布尔运算、材质设置、光照配置,最终完成一张精美桌子的 3D 建模——包括桌面、桌腿、倒角、木纹材质。还会实现参数化批量生成不同风格的桌子、渲染输出 PNG 图片、以及 360 度旋转动画。全程用自然语言驱动 Codex,让建模从"点鼠标"变成"说人话"!

yueyeguzhuo的专栏 633

数组的最长递减子序列java_求一个数组的最长递减子序列 比如{9,4,3,2,5,4,3,2}的最长递减子序列为{9,5,4,3,2}...

问题描述:给出一个数列,找出其中最长的单调递减(或递增)子序列。解题思路:动态规划。假设0到i-1这段数列的最长递减序列的长度为s,且这些序列们的末尾值中的最大值是t。对于a[i]有一下情况:(1) 如果a[i]比t小,那么将a[i]加入任何一个子序列都会使0到i的最长单调序列长度变成s+1,这样的话,在0到i的数列中,长度为s+1的递减子序列的末尾值最大值就是a[i];(2) 如果a[i]和t相...

weixin_33484163的博客 719

基于MATLAB的井筒多相流模拟

井筒多相流的模拟可以基于不同的数学模型和计算方法。其中,最常用的模型之一是多相流模型,它基于质量守恒、动量守恒和能量守恒等原理,描述了流体在井筒中的流动行为。对于井筒多相流的模拟和分析可以帮助我们理解和优化油气田开发过程中的流体行为,从而提高产量和效率。在本文中,我们将介绍如何使用MATLAB进行井筒多相流的模拟,并提供相应的源代码。需要注意的是,以上示例是一个简化的模拟,仅用于演示如何使用MATLAB进行井筒多相流模拟。实际应用中,我们需要考虑更多的物理过程和参数,并使用更复杂的数值方法和模型进行模拟。

AtdiHtml的博客 706

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

求最长递减子序列(转载)

Q:例如:有一个序列,例如 9 8 2 1 7 5 3 4 3 2 1.      求出最长的递减子序列。如本例的结果就是:9 8 7 5 4 3 2 1。 分析:         可采用动态规划的思想进行解答,时间复杂度为O(n^2).        设原数组为a[1....n]。另设一数组d[1....n],其中d[i]表示从第i个元素开始(一定包含第i个元素),到整个数组末尾的子序列

u012427276的专栏 678

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

算法6、一维动态规划-单序列问题(最大连续和/最长子序列)

在前一题的基础上,再根据maxSub遍历dp,就能找到所有满足最大和maxSub的子序列结尾元素索引j, 还需要知道这些子序列的首元素i,那么额外增加一个数组start[j]记录以j索引元素为结尾的最大连续子序列的首元素索引, 也利用分治,那么start[j]的值,当a[j]+dp[j-1] < a[j],首元素是该元素本身,否则,首元素就是以前一个元素为结尾的最大连续子序列的首元素,初始化start[1] = a[1].比如-2, 11, -4, 13,-5的序列,要求以13结尾的最大连续子序列和,

topsylily的博客 936

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

动态规划——最长递增子序列和最长公共子序列

(1)最长递增子序列 一个序列有n个数:a[1],a[2],…,a[n],求出最长递增子序列的长度。 比如说对于测试数据5,3,4,8,6,7来说: 第一个数字5,d[0] = 1 第一个数字3,前面没有比他还小的了,d[1] = 1 第三个数字4,最长的递增子序列就是3,4,d[2] = 2 第四个数组8,d[3] = 3 第五个数字6,d[4] = 3 第六个数字7,d[5] =

hulamua的博客 5810

最长递增和递减子序列详解(longest increasing subsequence)

对于动态规划问题,往往存在递推解决方法,这个问题也不例外。要求长度为i的序列的Ai{a1,a2,……,ai}最长递增子序列,需要先求出序列Ai-1{a1,a2,……,ai-1}中以各元素(a1,a2,……,ai-1)作为最大元素的最长递增序列,然后把所有这些递增序列与ai比较,如果某个长度为m序列的末尾元素aj(j<i)比ai要小,则将元素ai加入这个递增子序列,得到一个新的长度为m+1的新序列,

seekcreation的专栏 3888
上一篇: 通过gralloc分析驱动module
下一篇: 算法:动态规划解 0-1 背包问题
span76
博客等级 码龄18年 117粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值