最长上升下降子序列
2013-08-16 12:21
309 查看
Description
给定n个数,从中拿走x(x>=0)个数,使剩下的数最有下列性质。
A1 < A2 < A3 <…At > At+1 >At+2 > … > As
问最少要抽掉几个数,此数列才会具有以上性质。
Input
一个数n (1<=n<=100),后面跟着n个正整数,表示这个数列。
Output
输出最少要抽掉几个数,此数列才会具有以上性质。
Sample Input
Sample Output
Hint
第一个案例中已经满足以上性质,所以就不用拿任何数,因而输出0
第二个案例拿走8就可以满足以上性质
Source
yygy
给定n个数,从中拿走x(x>=0)个数,使剩下的数最有下列性质。
A1 < A2 < A3 <…At > At+1 >At+2 > … > As
问最少要抽掉几个数,此数列才会具有以上性质。
Input
一个数n (1<=n<=100),后面跟着n个正整数,表示这个数列。
Output
输出最少要抽掉几个数,此数列才会具有以上性质。
Sample Input
3 1 2 3 6 1 2 6 5 4 8
Sample Output
0 1
Hint
第一个案例中已经满足以上性质,所以就不用拿任何数,因而输出0
第二个案例拿走8就可以满足以上性质
Source
yygy
#include <cstdio> #include <cstring> #include <queue> #include <stack> #include <vector> #include <set> #include <algorithm> using namespace std; int a[10010]; int dp1[10010],dp2[10010]; int main() { int n; while(~scanf("%d",&n)) { for(int i=1;i<=n;i++) { scanf("%d",&a[i]); dp1[i]=dp2[i]=1; } int sum=0; for(int i=1;i<=n;i++) for(int j=i-1;j>=1;j--) if(a[i]>a[j] && dp1[j]+1>dp1[i]) dp1[i]=dp1[j]+1; for(int i=n;i>=1;i--) for(int j=i+1;j<=n;j++) if(a[i]>a[j] && dp2[j]+1>dp2[i]) dp2[i]=dp2[j]+1; for(int i=1;i<=n;i++) { if(dp1[i]+dp2[i]-1>sum) sum=dp1[i]+dp2[i]-1; } printf("%d\n",n-sum); } }
相关文章推荐
- pta L2-014. 列车调度 Dilworth定理(最少下降子序列数等于最长上升子序列长度)@
- 淦!最长上升\下降\不上升\不下降序列
- 最长上升或下降子序列解法 总结
- LIS(Longest Increasing Subsequence)最长上升(不下降)子序列
- 求最长上升/下降子序列【O(nlgn)】
- 最长上升(下降)子序列 O(nlogn)
- 如何用O(nlogn)的的速度求解最长上升(下降)子序列
- 蓝桥杯算法训练拦截导弹【最长上升子序列 & 最长非下降子序列nlogn 和 n^2】
- 最长不下降子序列(可以改成最长上升子序列)
- 最长上升(不下降)子序列(详细,转)
- POJ3670Eating Together(LIS最长(非)上升(下降)子序列模板)
- 算法:最长上升下降子序列
- 拦截导弹(规律:下降子序列的个数等于最长上升子序列的长度)
- Alignment ( 最长上升(下降)子序列 )
- 最长上升序列、最长下降序列及其变形模板
- 最长非上升/非下降子序列(O(nlogn)非连续)
- POJ 1836 Alignment 最长上升(下降)子序列(dp)
- 最长上升子序列、最长下降子序列的DP算法由O(n^2)到O(nlogn)算法
- POJ 1836 Alignment 【最长上升(下降)子序列】
- POJ 1836 Alignment(DP max(最长上升子序列 + 最长下降子序列))