51nod动态规化--最长单调递增子序列

博客探讨了如何找出长度为N的数组的最长递增子序列,通过讲解动态规划的解决方案,并指出某些国内在线判题平台如POJ和HDU不支持特定函数的情况,同时提及其他平台如CF和Topcoder对此的支持。
摘要由CSDN通过智能技术生成

题目:

给出长度为N的数组,找出这个数组的最长递增子序列。(递增子序列是指,子序列的元素是递增的)

例如:5 1 6 8 2 4 5 10,最长递增子序列是1 2 4 5 10。
输入

第1行:1个数N,N为序列的长度(2 <= N <= 50000)
第2 - N + 1行:每行1个数,对应序列的元素(-10^9 <= S[i] <= 10^9)

输出

输出最长递增子序列的长度。

输入示例

8
5
1
6
8
2
4
5
10

输出示例

5

代码如下:

#include <bits/stdc++.h>

using namespace std;

typedef long long LL;

const int INF = 0x7fffffff;
const int maxn = 50000 + 131;

int Dp[maxn], Num[maxn];

int main() {
    int N;
    while(cin >> N) {
        for(int i = 0; i < N; ++i) cin >> Num[i];
        fill(Dp, Dp+N, INF);
        for(int i = 0; i < N; ++i) {
//            d=lower_bound(Dp, Dp+N, Num[i])-Dp;
//            printf("%d\n",);
			*lower_bound(Dp, Dp+N, Num[i]) = Num[i];
            
        }
        cout << lower_bound(Dp, Dp+N, INF) - Dp << endl;
    }
}
#include<bits/stdc++.h>这个头文件包含以下等等C++中包含的所有头文件: 

#include <iostream> 
#include <cstdio> 
#include <fstream> 
#include <algorithm> 
#include <cmath> 
#include <deque> 
#include <vector> 
#include <queue> 
#include <string> 
#include <cstring> 
#include <map> 
#include <stack> 
#include <set> 

等等……

不过在国内oj中,poj,hdu 不支持这个函数,这几个oj的编译器问题,其他国外的oj,还有台湾的oj都支持,CF,Topcoder也都支持。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值