最长升序字数列

1.代码实现

 1 #include<iostream>
 2 using namespace std;
 3 int max(int x,int y)
 4 {
 5     return x>y? x:y;
 6 }
 7 int main()
 8 {
 9     int n,src,a[100],dp[100];
10     while(cin>>n){
11         src=0;
12         for(int i=0;i<n;i++){
13         cin>>a[i];
14         dp[i]=1;
15         }
16         for(int i=0;i<n;i++){
17             for(int j=0;j<i;j++){
18                 if(a[i]>a[j]){
19                     dp[i]=max(dp[i],dp[j]+1);
20                     //对第a[i]与a[j]比较,dp[i]与dp[j]+1比较,来控制dp[i]的取值
21                 }
22             }
23             src=max(src,dp[i]);
24             //利用之前的for语句,遍历每个相邻数组,取最大值
25         }
26         cout<<src<<endl;
27     }
28 }

2.运行结果

7
1 2 4 3 6 5 7
5
8
1 4 6 9 3 5 10 16
6
时间: 2024-10-13 00:34:13

最长升序字数列的相关文章

【经典算法】寻找最长01字串(转自待字闺中)

这两天在微信公众号“待字闺中”中看到一个经典的面试算法,寻找最长01字串,原题目是这么说的: 给定一个数组,数组中只包含0和1.请找到一个最长的子序列,其中0和1的数量是相同的. 例1:10101010 结果就是其本身.例2:1101000 结果是110100 这个题目,看起来比较简单,一些同学可能认为题目的描述符合动态规划的特征,然后就开始用动态规划解,努力找状态转移方程.这些同学的感觉,是很正确的.但,找状态转移方程,我们要对原来的数组进行变换一下. 原来是0和1的串,我们将0都换为-1.这

求最长升序子串的算法

今天复习了一下以前自己写的求最长升序子串的c语言代码,竟然发现有点不太懂,现在贴出来重新温习一下. 源代码贴出来如下: #include<stdio.h>#include<string.h>void main(){ char arry[10001]; int len,max=0,i,j,num[10001],k; gets(arry); len=strlen(arry); num[0]=1; for(i=0;i<len;i++) { k=0; for(j=0;j<i;j

URAL 1517 Freedom of Choice(后缀数组,最长公共字串)

题目 输出最长公共字串 #define maxn 200010 int wa[maxn],wb[maxn],wv[maxn],ws[maxn]; int cmp(int *r,int a,int b,int l) {return r[a]==r[b]&&r[a+l]==r[b+l];}//yuan lai zhi qian ba zhe li de l cuo dang cheng 1 le ... void da(int *r,int *sa,int n,int m) { int i,j

最长递归子序列、最长公共字串、最长公共子序列、编辑距离

[TOC]   ### 最长递归子序列 #### 题目 给定数组arr,返回arr中的最长递增子序列,如`arr=[2,1,5,3,6,4,8,9,7]`,返回的最长递增子序列为`[1,3,4,8,9]` #### 题解思路 先用DP来求解子序列递增的最大长度,如arr的长度序列为`dp=[1,1,2,2,3,3,4,5,4]`,然后对这个长度序列dp从右到左遍历,得到最长递增子序列. 1. 求解长度序列,令dp[i]表示在以arr[i]这个数结尾的情况下,arr[0...i]中的最大递增子序列

最长公共子序列(LCS)问题 Longest Common Subsequence 与最长公告字串 longest common substr

问题描述:字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字符序列X=“x0,x1,…,xm-1”,序列Y=“y0,y1,…,yk-1”是X的子序列,存在X的一个严格递增下标序列<i0,i1,…,ik-1>,使得对所有的j=0,1,…,k-1,有xij=yj.例如,X=“ABCBDAB”,Y=“BCDB”是X的一个子序列. 考虑最长公共子序列问题如何分解成子问题,设A=“a0,a1,…,am-1”,B=“b0,b1,…,bm

代码坏味道之过长的參数列

1.为什么会出现过长的參数的函数呢? 出现过长的參数列,我们在编敲代码的时候职责划分不清晰,一个函数做了太多的事情.可能会让调用者传入很多其它的參数进行功能的实现.第二函数封装不合理,导致调用函数的内部变量成为封装函数的參数. 2.当我们遇上了过长的參数函数怎么办? 当我们遇上了过长的參数列的函数有两种方法来解决.第一.通过重载參数把程序中临时不须要的函数的參数进行封装,降低过长的參数列.第二.通过封装參数列对象,在封装的时候尽量将职责相近的參数放在一起,这样做提高了封装对象的内聚性. 3.如何

【编程题目】最长公共字串

56.最长公共字串(算法.字符串).题目:如果字符串一的所有字符按其在字符串中的顺序出现在另外一个字符串二中,则字符串一称之为字符串二的子串.注意,并不要求子串(字符串一)的字符必须连续出现在字符串二中.请编写一个函数,输入两个字符串,求它们的最长公共子串,并打印出最长公共子串.例如:输入两个字符串 BDCABA 和 ABCBDAB,字符串 BCBA 和 BDAB 都是是它们的最长公共子串,则输出它们的长度 4,并打印任意一个子串. 经典动态规划题. #include <stdio.h> #i

java最长升序子序列

最长升序子序列是最长公共子序列的变形. 只要将字符串升序排序后与原字符串求最长公共子序列即可. 以下提供一个工具类可以传入任何形式的数组.(添加新类型的数组时构造方法要自己加). package com.leejuen.string; import java.lang.reflect.Array; import java.util.Arrays; public class LCS { private Integer len; private Object str1; private Object

代码坏味道之过长的参数列

1.为什么会出现过长的参数的函数呢? 出现过长的参数列,我们在编写程序的时候职责划分不清晰,一个函数做了太多的事情,可能会让调用者传入更多的参数进行功能的实现.第二函数封装不合理,导致调用函数的内部变量成为封装函数的参数. 2.当我们遇上了过长的参数函数怎么办? 当我们遇上了过长的参数列的函数有两种方法来解决,第一,通过重载参数把程序中暂时不需要的函数的参数进行封装,减少过长的参数列.第二,通过封装参数列对象,在封装的时候尽量将职责相近的参数放在一起,这样做提高了封装对象的内聚性. 3.怎样避免