zoukankan      html  css  js  c++  java
  • pta 习题集 5-5 最长连续递增子序列 (dp)

    给定一个顺序存储的线性表,请设计一个算法查找该线性表中最长的连续递增子序列。例如,(1,9,2,5,7,3,4,6,8,0)中最长的递增子序列为(3,4,6,8)。

    输入格式:

    输入第1行给出正整数nn≤105105);第2行给出nn个整数,其间以空格分隔。 

    输出格式:

    在一行中输出第一次出现的最长连续递增子序列,数字之间用空格分隔,序列结尾不能有多余空格。

    输入样例:

    15
    1 9 2 5 7 3 4 6 8 0 11 15 17 17 10
    

    输出样例:

    3 4 6 8
    #include <iostream>
    #include <string.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <math.h>
    #include <string>
    #include <map>
    
    using namespace std;
    const int maxn=1e5;
    int n;
    int a[maxn+5];
    int dp[maxn+5];
    int search(int num,int l,int r)
    {
    	int mid;
    	while(l<=r)
    	{
    		mid=(l+r)/2;
    		if(num>dp[mid])
    			l=mid+1;
    		else
    			r=mid-1;
    	}
    	return l;
    }
    int main()
    {
    	scanf("%d",&n);
    	for(int i=1;i<=n;i++)
    	{
    		scanf("%d",&a[i]);
    	}
    	memset(dp,0,sizeof(dp));
    	dp[1]=1;
    	for(int i=2;i<=n;i++)
    	{
    		if(a[i]>a[i-1])
    			dp[i]=dp[i-1]+1;
    		else
    			dp[i]=1;
    	}
    	int max=0;
    	int pos=0;
    	for(int i=n;i>=1;i--)
    	{
    		if(max<=dp[i])
    		{
    			max=dp[i];
    			pos=i;
    		}
    	}
    	for(int i=pos-dp[pos]+1;i<=pos;i++)
    	{
    		if(i!=pos)
    		printf("%d ",a[i]);
    		else
    			printf("%d
    ",a[i]);
    	}
    	return 0;
    
    
    }


  • 相关阅读:
    OLAP ODS项目的总结 平台选型,架构确定
    ORACLE ORA12520
    ORACLE管道函数
    ORACLE RAC JDBC 配置
    ORACLE RAC OCFS连接产生的错误
    ORACLE 启动和关闭详解
    OLAP ODS项目的总结 起步阶段
    ORACLE RAC 配置更改IP
    ORACLE RAC OCR cann't Access
    ORACLE RAC Debug 之路 CRS0184错误与CRS初始化
  • 原文地址:https://www.cnblogs.com/dacc123/p/8228552.html
Copyright © 2011-2022 走看看