zoukankan      html  css  js  c++  java
  • (基础)最长上升子序列

    题目描述:给出一个数列{a1,a2,...,an},要求你选出尽量多的元素,使这些元素按其相对位置单调递增。
                     任务就是对于给定的序列,求出最长上升子序列的长度。
    输入数据:输入的第一行是序列的长度N(1<=N<=1000)。第二行给出序列中的N个整数,这些整数的取值范围都是0~10000。
    输出要求:最长上升子序列的长度。
    输入样例:
    7
    1   7    3    5    9     4    8
    输出样例:
    4

     思路:先初始化每个位置为1,即只选该单个元素

        再每一个元素和该元素之前的每一个元素比较,若小于该元素,表示可以通过小的那个元素到该元素,则更新子序列长度加1

        最后找到每个元素中最大子序列长度。

    #include <stdio.h>
    #include <iostream>
    #include <math.h>
    #include <string.h>
    using namespace std;
    const double PI=acos(-1.0);
    const int inf=0x7fffffff;
    int a[105];
    int dp[105];
    int n,m,mx,sum; 
    
    int main(){
    	cin>>n;
    	mx=-inf;
    	for(int i=1;i<=n;i++){
    		cin>>a[i];
    	}
    	for(int i=1;i<=n;i++){
    		dp[i]=1;                         //初始化每个位置长度为1 
    		for(int j=1;j<i;j++){
    			if(a[i]>a[j]){
    				dp[i]=max(dp[i],dp[j]+1);//可以经过小的那个元素dp[j]到dp[i],所以需要dp[j]+1 
    			}
    		}
    		mx=max(mx,dp[i]);//mx为所有元素的子序列中最大的值 
    	}
    	cout<<mx;
    	return 0; 
    }
    

    (二维最大上升子序列) 套信封问题

    给出 n 个信封的长 l 和宽 w ,某信封a的长和宽都小于信封b,则a信封可以套入b信封

    求最多套入信封的层数?

    思路:先对长可以先进行一个排序,然后对宽寻找最长上升子序列

  • 相关阅读:
    python之数据规范化(Min-Max规范化)
    python对全班成绩进行数据清洗(pandas的使用)
    python统计全班的成绩(numpy的使用)
    python爬虫之动态渲染页面抓取-(Selenium)的使用
    python之小米应用商店搜索
    python之小米应用商店爬虫
    cmds系统数据库源端大表数据更新优化
    临时表空间扩容
    性能优化概要(2)数据库时间,监控和优化工具
    cmds挖掘redolog
  • 原文地址:https://www.cnblogs.com/xusi/p/12347787.html
Copyright © 2011-2022 走看看