最长上升子序列(LIS) 两种复杂度算法
2017-08-09 12:39
381 查看
//O(n^2)
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn = 30010;
int dp[maxn], a[maxn];
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
for(int i=0;i<n;++i)
scanf("%d",&a[i]);
int ans=0;
for(int i=0;i<n;++i)
{
dp[i]=1;
for(int j=0;j<i;++j)
{
if(a[j]<a[i])
dp[i] = max(dp[i], dp[j]+1);
}
ans=max(dp[i],ans);
}
printf("%d\n",ans);
}
return 0;
}
//O(nlogn)
#include <cstdio>
#include <algorithm>
#define INF 0x3f3f3f
using namespace std;
int dp[30010],a[30010];
int main()
{
int n,i,j;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;++i)
{
scanf("%d",&a[i]);
dp[i]=INF;
}
for(i=0;i<n;++i)
*lower_bound(dp,dp+n,a[i])=a[i];
printf("%d\n",lower_bound(dp,dp+n,INF)-dp);
}
return 0;
}
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn = 30010;
int dp[maxn], a[maxn];
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
for(int i=0;i<n;++i)
scanf("%d",&a[i]);
int ans=0;
for(int i=0;i<n;++i)
{
dp[i]=1;
for(int j=0;j<i;++j)
{
if(a[j]<a[i])
dp[i] = max(dp[i], dp[j]+1);
}
ans=max(dp[i],ans);
}
printf("%d\n",ans);
}
return 0;
}
//O(nlogn)
#include <cstdio>
#include <algorithm>
#define INF 0x3f3f3f
using namespace std;
int dp[30010],a[30010];
int main()
{
int n,i,j;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;++i)
{
scanf("%d",&a[i]);
dp[i]=INF;
}
for(i=0;i<n;++i)
*lower_bound(dp,dp+n,a[i])=a[i];
printf("%d\n",lower_bound(dp,dp+n,INF)-dp);
}
return 0;
}
相关文章推荐
- LIS(最长上升子序列两种算法模板)DP模板,并且输出序列
- 最长上升子序列(LIS)的两种算法
- 最长上升子序列(LIS)的两种算法
- 最长上升子序列两种复杂度的算法 LIS
- 最长上升子序列(LIS)算法…
- 最长上升子序列(LIS)算法…
- 最长上升子序列(LIS)长度的O(nlogn)算法
- 最长上升子序列(LIS)长度的O(n^2)与O(nlogn)算法
- 最长上升子序列(LIS)长度的O(nlogn)算法
- 最长上升子序列(LIS)长度的O(nlogn)算法
- 最长上升子序列(LIS) 两种复杂度算法
- 【LIS最长上升子序列】O(n^2)与O(nlogn)算法(HDU1257)
- 最长上升子序列(LIS)长度的O(nlogn)算法
- 最长上升子序列(LIS)长度 O(nlogn)算法 hdu1950为例
- Poj 1631 n*logn 的最长上升子序列(LIS)算法
- 最长上升子序列(LIS)的O(nlogn) & O(n^2)算法 - 动态规划
- 【训练题】航线设计 | 使用最长上升子序列(LIS)长度的O(nlogn)算法优化
- nlogn的最长上升子序列的算法(LIS)
- 最长上升子序列(LIS)长度的O(nlogn)算法
- 最长上升子序列(LIS)算法分析(做…