poj 3670 Eating Together(最长不下降子序列、LIS)
来源:互联网 发布:cf一键领枪软件 编辑:程序博客网 时间:2024/06/05 17:41
题目:http://poj.org/problem?id=3670
题目大意:就是给你n个数,让你删除尽量少的数,然后让它变成最长不下降或者不上升序列。
题目大意:就是给你n个数,让你删除尽量少的数,然后让它变成最长不下降或者不上升序列。
思路:就是求这个序列的最长不上升和不下降子序列,然后 ans = n-max(n1,n2)。不上升懒得写了,直接把原数组翻个向,求LIS。
注意和最长上升子序列的区别。num[ i ] 和 a[ len ] 判断这里一样要加等号,相等也应该放进去。然后后面一定要是 upper_bound()。
代码如下:
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int MAXN = 33333;int num[MAXN];int a[MAXN],b[MAXN];int lis(int n){ a[1] = num[0]; int len = 1; for(int i = 1;i < n;i++) { if(num[i] >= a[len]) { a[len+1] = num[i]; len++; } else { int pos = upper_bound(a+1,a+len+1,num[i])-a; a[pos] = num[i]; } } return len;}int main(){ int n; while(~scanf("%d",&n)) { for(int i = 0;i < n;i++) scanf("%d",&num[i]); int n1 = lis(n); for(int i = 0;i < n/2;i++) swap(num[i],num[n-1-i]); int n2 = lis(n); //printf("n1 = %d,n2 = %d\n",n1,n2); printf("%d\n",n-max(n1,n2)); } return 0;}
- poj 3670 Eating Together(最长不下降子序列、LIS)
- poj 3670 Eating Together(最长上升子序列 lis nlogn复杂度)
- POJ 3670 Eating Together LIS最长递增子序列+二分查找 nlogn算法
- 【BZOJ1609】[Usaco2008 Feb]Eating Together麻烦的聚餐【最长不下降子序列】
- POJ 3670 Eating Together(LIS)
- poj 3670 Eating Together LIS
- POJ3670Eating Together(LIS最长(非)上升(下降)子序列模板)
- LIS--最长不下降子序列
- 最长不下降子序列(动态规划:LIS)
- POJ 3670 Eating Together(LIS+nlogn算法)
- poj 3670 Eating Together LIS+二分
- 一个叫做LIS(最长不下降子序列)的东西
- O(NlogN)的最长不下降子序列LIS
- [线性DP]最长不下降子序列(LIS)
- POJ 1887 Testingthe CATCHER (LIS:最长下降子序列)
- POJ 1952(最长不下降子序列的个数)
- poj 3670 Eating Together
- POJ 3670 (Eating Together)
- ndroid appwidget 一些用法和注意事项
- hdu 1828 Picture(矩形周长并)
- hdu 1255 覆盖的面积(矩形面积二次交)
- sql 多行列转换( case & union all)
- SQL Server数据库事务日志序列号(LSN)介绍
- poj 3670 Eating Together(最长不下降子序列、LIS)
- ios的一些基本知识
- 【括号配对问题 2】
- 杭电1080-Lcs+DP(**有借鉴**)
- 索引建立步骤
- OSCACHE介绍
- SQL Server如何截断(Truncate)和收缩(Shrink)事务日志
- Shell脚本常识
- Android设备检测