Poj 2533-Longest Ordered Subsequence(最长有序子序列)
来源:互联网 发布:java图片转base64编码 编辑:程序博客网 时间:2024/06/05 20:50
题意:就是求最长上升子序列。
分析:有朴素的O(N^2)的简单dp,也有O(nlogn)的二分思想。
方法一:dp,对应原序列的每个元素,dp数组记录包含这个数在内的与之前所有数一起能构成的最长有序子序列的长度,最后对dp数组遍历取最大值即可
#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>using namespace std;int a[1005],dp[1005];int main(){int n;while(cin>>n){for (int i = 0; i < n; i++){scanf("%d",&a[i]);dp[i] = 0;}dp[0] = 1;int maxe,maxn = 1;for (int i = 1; i < n; i++){maxe = 0;for (int j = 0; j < i; j++){if(a[i]>a[j])maxe = max(maxe,dp[j]);}dp[i] = maxe+1;maxn = max(dp[i],maxn);}printf("%d\n",maxn);}return 0;}
方法二:二分优化。
#include<cstdio>#include<cstring>#include<cstdlib>#include<iostream>#include<algorithm>#include<cmath>#include<string>#include<queue>#include<map>#include<vector>using namespace std;typedef __int64 LL;#define eps 1e-8const double PI = 2*acos(0.0);#define maxn 50500int y[maxn];vector<int>v;int main(){int n,t,i;while(cin>>n){for(i = 0;i<n;i++){cin>>y[i];}v.clear();vector<int>::iterator it;//这样做,只能够求上升子序列,不能求不降子序列,还是用二分写,容易改= =for(i = 0;i<n;i++){it = lower_bound(v.begin(),v.end(),y[i]);if(it == v.end())v.push_back(y[i]);else{*it = y[i];}}cout<<v.size()<<endl;}return 0;}
- Poj 2533-Longest Ordered Subsequence(最长有序子序列)
- poj 2533 Longest Ordered Subsequence (最长子序列)
- poj-2533-Longest Ordered Subsequence-最长上升子序列
- poj 2533 Longest Ordered Subsequence(LIS(最长上升子序列))
- POJ 2533 Longest Ordered Subsequence 最长上升子序列
- poj 2533 Longest Ordered Subsequence(最长上升子序列)
- poj 2533 Longest Ordered Subsequence(最长递增子序列)
- poj 2533 Longest Ordered Subsequence(最长上升子序列)
- Longest Ordered Subsequence - POJ 2533 最长上升子序列
- poj 2533 Longest Ordered Subsequence(最长上升子序列)
- POJ 2533 Longest Ordered Subsequence(LIS:最长上升子序列)
- POJ 2533-Longest Ordered Subsequence(dp_最长上升子序列)
- POJ 2533 Longest Ordered Subsequence(最长上升子序列)
- poj-2533 Longest Ordered Subsequence 【最长上升子序列】
- POJ - 2533 Longest Ordered Subsequence(最长上升子序列)
- poj 2533 Longest Ordered Subsequence (最长上升子序列)
- POJ 2533 Longest Ordered Subsequence(最长上升子序列)
- poj 2533 Longest Ordered Subsequence 最长递增子序列
- 游戏后台之内存管理篇
- 邮箱格式验证
- 可爱的玩笑
- 树蛙和摄影师
- ORACLE PL/SQL编程之八:把触发器说透
- Poj 2533-Longest Ordered Subsequence(最长有序子序列)
- 函数
- axis WebServices 完美调用天气预报,查询、显示 代码!
- 接收字段的成员属性与接收数组参数的成员方法的进行反射
- 2013 Multi-University Training Contest 1
- 存储过程
- Ubuntu忘记root密码
- The Hound of the Baskervilles——8、The Stapletons of Pen House
- 在UITableView里面 定制滑动显示出来的 按钮的底色。