zoukankan      html  css  js  c++  java
  • zoj_2136Longest Ordered Subsequence

    Longest Ordered Subsequence

    Time Limit: 2 Seconds      Memory Limit: 65536 KB

    A numeric sequence of ai is ordered if a1 < a2 < ... < aN. Let the subsequence of the given numeric sequence (a1, a2, ..., aN) be any sequence (ai1, ai2, ..., aiK), where 1 <= i1 < i2 < ... < iK <= N. For example, the sequence (1, 7, 3, 5, 9, 4, 8) has ordered subsequences, e.g., (1, 7), (3, 4, 8) and many others. All longest ordered subsequences of this sequence are of length 4, e.g., (1, 3, 5, 8).

    Your program, when given the numeric sequence, must find the length of its longest ordered subsequence.


    Input

    The first line of input contains the length of sequence N (1 <= N <= 1000). The second line contains the elements of sequence - N integers in the range from 0 to 10000 each, separated by spaces.


    Output

    Output must contain a single integer - the length of the longest ordered subsequence of the given sequence.


    This problem contains multiple test cases!

    The first line of a multiple input is an integer N, then a blank line followed by N input blocks. Each input block is in the format indicated in the problem description. There is a blank line between input blocks.

    The output format consists of N output blocks. There is a blank line between output blocks.


    Sample Input

    1

    7
    1 7 3 5 9 4 8


    Sample Output

    4


    最长上升子序列。。。


    #include <iostream>
    #include <cstring>
    #include <algorithm>
    using namespace  std;
    const int MAXN = 1005;
    int main()
    {
    	freopen("in.txt","r",stdin);
    	int t, n, i, j;
    	int arr[MAXN] = {0};
    	int dp[MAXN] = {0};
    	cin >> t;
    	while(t--)
    	{
    		memset(arr,0,sizeof(arr));
    		memset(dp,0,sizeof(dp));
    		cin >> n;
    		for(i = 1; i <= n; i++)
    		{
    			cin>>arr[i];
    		}
    		for(i = 1; i <= n; i++)
    			dp[i] = 1;
    		for(i = 2; i <= n; i++)
    		{
    			for(j = 1; j < i; j++)
    			{
    				if(arr[j] < arr[i] && dp[j] >= dp[i])
    					dp[i] = dp[j] + 1;
    			}
    		}
    		int ans = -1;
    		for(i = 1; i <= n; i++)
    			ans = max(ans, dp[i]);
    		cout << ans << endl;
    		if(t != 0)
    			cout<<endl;
    	}
    }








  • 相关阅读:
    敏捷实践:比每日会议更疯狂的半日会议!
    视频分享:编码与代码评审质量与现实的最激烈冲突点
    项目管理的“三边六拍”!
    挨踢项目求生法则需求篇
    恭喜一棵树博客开通
    盛大格子客或将继开心农场之后又一疯狂游戏
    离线安装.NETFRAMEWORK 3.5
    世界上尽有如此恶俗的软件还广为流传
    为什么是一棵树?
    java 之 注解
  • 原文地址:https://www.cnblogs.com/lgh1992314/p/5835268.html
Copyright © 2011-2022 走看看