动态规划法最长不下降序列

该博客探讨了如何运用动态规划算法解决找到给定数列中最长不下降序列的问题。通过输入长度和序列数,程序计算并输出最长不下降序列的长度及其具体序列。文章还介绍了动态规划法的基本思路,并提供了相应的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

案例:
设有由n个不相同的整数组成的数列,记为:b(1)、b(2)、…、b(n)且b(i)<>b(j)(i<>j),若存在i1<i2<i3<…<ie且有b(i1)<b(i2)<…<b(ie)则称为长度为e的不下降序列。程序要求,当原数列出之后,求出最长不下降序列。
样例输出:
请输入长度:
14
请输入序列数:
13,7,9,16,38,24,37,18,44,19,21,22,63,15
最长不下降序列的长度为:8
7,9,16,18,19,21,22,63

最开始要理解动态规划法的思路:设置一个三行n列的数组,第一行记录输入的数,
第二行添加两个常量Long=li=0,Long是记录不下降序列的长度,li记录Long之后的索引,从后往前比较,a[i][0]和a[j][0]依次比较,如果a[i][0]<a[j][0]&&a[j][1]>Long 则Long=a[j][1];li=j;
如果Long>0,则a[i][1]=Long+1;a[i][2]=li;
其求解过程如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14
13 7 9 16 38 24 37 18 44 19 21 22 63 15
7 8 7 6 3 4 3 5 2 4 3 2 1 1
4 3 4 8 9 7 9 10 13 11 12 13 0 0

代码如下:

#include<stdio.h>
#define SIZE 101
void BuXJ(){
   
   
	int a[SIZE][3],n;
	printf("请输入长度\n"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

F__lower

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值