POJ3903Stock Exchange&&POJ1631Bridging signals最长上升子序列 &&POJ1887Testing the CATCHER(最长下降子序列)(LIS模版题)
2015-01-30 19:41
369 查看
题目链接:http://poj.org/problem?id=3903
题目链接:http://poj.org/problem?id=1631
题目链接:http://poj.org/problem?id=1887
题目解析:
这两道题都是直接求最长上升子序列,没什么好说的。
POJ 3903这题n为1000000,如果用n^2的算法肯定超时,所以要选择nlogn的算法。都是简单题。
POJ1631:
View Code
POJ1887Testing the CATCHER:
题目链接:http://poj.org/problem?id=1631
题目链接:http://poj.org/problem?id=1887
题目解析:
这两道题都是直接求最长上升子序列,没什么好说的。
POJ 3903这题n为1000000,如果用n^2的算法肯定超时,所以要选择nlogn的算法。都是简单题。
#include <iostream> #include <string.h> #include <stdio.h> #include <algorithm> #include <math.h> #define eps 1e-9 using namespace std; int n,len,a[100010],d[100010]; int er(int q[],int l,int r,int key)//好好研究二分 { int mid; while(l<=r) { mid=(l+r)/2; if(q[mid]==key) { return mid; } else if(q[mid]>key) { r=mid-1; } else l=mid+1; } return l; } int main() { int we; while(scanf("%d",&n)!=EOF) { for(int i=1; i<=n; i++) { scanf("%d",&a[i]); } len=1; d[len]=a[1]; for(int i=2; i<=n; i++) { if(a[i]>d[len]) { d[++len]=a[i]; } else { we=er(d,1,len,a[i]); d[we]=a[i]; } } printf("%d\n",len); } return 0; }
POJ1631:
#include <iostream> #include <string.h> #include <stdio.h> #include <algorithm> #include <math.h> #define eps 1e-9 using namespace std; int n,len,a[40010],d[40010]; int er(int q[],int l,int r,int key)//好好研究二分 { int mid; while(l<=r) { mid=(l+r)/2; if(q[mid]==key) { return mid; } else if(q[mid]>key) { r=mid-1; } else l=mid+1; } return l; } int main() { int we,T; scanf("%d",&T); while(T--) { scanf("%d",&n); for(int i=1; i<=n; i++) { scanf("%d",&a[i]); } len=1; d[len]=a[1]; for(int i=2; i<=n; i++) { if(a[i]>d[len]) { d[++len]=a[i]; } else { we=er(d,1,len,a[i]); d[we]=a[i]; } } printf("%d\n",len); } return 0; }
View Code
POJ1887Testing the CATCHER:
#include <iostream> #include <string.h> #include <stdio.h> #include <algorithm> #include <math.h> using namespace std; int n,a[40002],d[40002],len; int er(int q[],int l,int r,int key)//好好研究二分 { int mid; while(l<=r) { mid=(l+r)/2; if(q[mid]==key) { return mid; } else if(q[mid]>key) { r=mid-1; } else l=mid+1; } return l; } int main() { int tt,we,K=0; while(scanf("%d",&a[1])!=EOF&&a[1]!=-1) { tt=1; while(scanf("%d",&a[++tt])!=EOF&&a[tt]!=-1) ; tt-=1; len=1; d[len]=a[tt]; for(int i=tt-1; i>=1; i--) { if(a[i]>d[len]) { d[++len]=a[i]; } else { we=er(d,1,len,a[i]); d[we]=a[i]; } } printf("Test #%d:\n",++K); printf(" maximum possible interceptions: %d\n\n",len); } return 0; }
相关文章推荐
- POJ 1887 Testing the CATCHER 最长不下降序列(LIS)问题
- 最长不下降子序列(LIS)
- 蓝桥杯算法训练拦截导弹【最长上升子序列 & 最长非下降子序列nlogn 和 n^2】
- poj 3670 Eating Together(最长不下降子序列、LIS)
- POJ3670Eating Together(LIS最长(非)上升(下降)子序列模板)
- 动态规划——最长不下降子序列(LIS)
- 最长上升子序列(LIS)的O(nlogn) & O(n^2)算法 - 动态规划
- hdoj1160 FatMouse's Speed ( STL + 最长下降子序列 /DP)
- 【模版】二分查找、最长上升子序列(LIS)、最长下降子序列模版
- [HNOI2004]打鼹鼠&Codevs_P1256 打鼹鼠(DP+最长不下降子序列变形)
- 最长不下降子序列(LIS)
- 最长上升子序列(LIS)&最长公共子序列(LCS)
- 最长不下降子序列(动态规划:LIS)
- hdu1160 FatMouse's Speed 最长上升子序列 LIS
- BZOJ3173:[TJOI2013]最长上升子序列 & HDU3564:Another LIS——题解
- 最长上升子序列(LIS)和最长下降子序列(LDS)
- C++ & Java ——最长不下降序列—变式题
- bzoj3171 最长上升子序列 Treap&Lis
- LIS——最长不下降子序列
- LIS(Longest Increasing Subsequence)最长上升(不下降)子序列