博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
最长上升子序列与最长公共子序列 C/C++
阅读量:6009 次
发布时间:2019-06-20

本文共 1225 字,大约阅读时间需要 4 分钟。

最长上升子序列:

思路:用数组b[1000]存放在i之前共有多少个上升子字符。并找出其中最长的,记录为len,遍历完0-i之后的len即为i之前最长上升子序列,因此用a[i]记录在i之前的最长上升子序列,共下一个元素参考。

在听了郭炜老师的课后,按照他的思路,把这俩题解出来,供以后回忆。

#include
#include
int a[1000];int b[1000];int main(){ int n,ans = 0; scanf("%d",&n); for(int i = 0;i < n;i++) scanf("%d",&a[i]),b[i] = 1; for(int i = 1;i < n;i++){ int len = 0; for(int j = 0;j < i;j++) if(a[j] < a[i] && b[j] > len) len = b[j]; b[i]+=len; } for(int i = 0;i < n;i++) if(b[i] > ans) ans = b[i]; printf("%d",ans); return 0;}

 

最长公共子序列:

 

代码很简单,画图很麻烦,我也不善表达,这个博主的文章想表达的和我的代码思路相同,请看

#include
#include
#define max(a,b) a>b?a:bint main(){ char a[1000],b[1000]; scanf("%s%s",a,b); int lenA = strlen(a),lenB = strlen(b); int Maxlen[100][100]; for(int i = 0;i < lenA;i++) Maxlen[i][0] = 0; for(int j = 0;j < lenB;j++) Maxlen[0][j] = 0; for(int i = 1;i <= lenA;i++) for(int j = 1;j <= lenB;j++){ if(a[i-1] == b[j-1]) Maxlen[i][j] = Maxlen[i-1][j-1]+1; else Maxlen[i][j] = max(Maxlen[i-1][j],Maxlen[i][j-1]); } int len = 0; for(int i = 1;i <= lenA;i++) for(int j = 1;j <= lenB;j++) if(Maxlen[i][j] > len) len = Maxlen[i][j]; printf("%d",len); return 0;}

 

转载于:https://www.cnblogs.com/long98/p/10352270.html

你可能感兴趣的文章
MyBATIS(即iBATIS)问题集
查看>>
Linux下autoconf和automake使用
查看>>
UDP之socket编程
查看>>
Spring Security4实战与原理分析视频课程( 扩展+自定义)
查看>>
Centos6.5升级系统自带gcc4.4.7到gcc4.8.0
查看>>
redis安装与配置文件详解
查看>>
VMware安装失败 “Failed to create the requested registry key Key:installer Error:1021"
查看>>
虚拟化系列-VMware vSphere 5.1 VDP备份管理
查看>>
消息队列服务器 memcacheq的搭建
查看>>
hdu 1024 Max Sum Plus Plus 小白都可以看得懂的解析
查看>>
shell中常见参数及判断命令
查看>>
VMware Horizon View 7.5 虚拟桌面实施咨询与购买--软件硬件解决方案
查看>>
2018新版驾照驾照psd模板下载
查看>>
【矢量图控件教程】矢量图控件VectorDraw 常见问题整理大全(一)
查看>>
文件系统、服务、防火墙、SELINUX——安全四大金刚
查看>>
RabbitMQ如何保证队列里的消息99.99%被消费?
查看>>
Lync Server 2010的部署系列_第五章 准备 Active Directory 域服务
查看>>
java基本数据类型及运算符小结
查看>>
第一周博客作业
查看>>
Python strip lstrip rstrip使用方法
查看>>