洛谷P1091 :合唱隊形
阿新 • • 發佈:2018-11-30
https://www.luogu.org/problemnew/show/P1091
題目描述
輸入輸出格式
輸入格式:
輸入輸出樣例
輸入樣例#1: 複製
8 186 186 150 200 160 130 197 220
輸出樣例#1: 複製
4
雙向最長上升子序列,
先從兩邊求出最長上升子序列,
求兩個方向的最長子序列和最大。
#include<stdio.h> #define N 220 int a[N],d1[N],d2[N]; int max(int a,int b) { return a>b?a:b; } int main() { int n,i,j,ans=0; scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d",&a[i]); for(i=1;i<=n;i++) d1[i]=d2[i]=1; for(i=2;i<=n;i++) { for(j=1;j<i;j++) { if(a[i]>a[j]) d1[i]=max(d1[i],d1[j]+1); } } for(i=n-1;i>=0;i--) { for(j=n;j>i;j--) { if(a[i]>a[j]) d2[i]=max(d2[i],d2[j]+1); } } for(i=1;i<=n;i++) { ans=max(ans,d1[i]+d2[i]); } printf("%d\n",n-ans+1); return 0; }