• 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;
    
    
    }


  • 相关阅读:
    你好毒
    Sketchup创建屋顶插件
    sketchup实体开洞插件holeonsolid
    SolidWork支架模型
    让WebForm异步起来
    正则表达式点滴(2)
    异步调用之精简方式
    浅谈C#中常见的委托
    基于异步方式的语法着色器
    利用WPF的ListView进行大数据量异步加载
  • 原文地址:https://www.cnblogs.com/dacc123/p/8228552.html
Copyright © 2020-2023  润新知