poj 1836(動態規劃最長正序子序列)
阿新 • • 發佈:2021-07-22
#include<iostream> using namespace std; const int maxn = 1005; double data[maxn]; int f[maxn],g[maxn],n,ans; int main(){ ios::sync_with_stdio(false); cin.tie(0); while(cin>>n){ for(int i=1;i<=n;i++){ cin>>data[i]; f[i] = 1; g[i]= 1; } for(int i=1;i<=n;i++){ for(int j=1;j<i;j++){ if(data[j]<data[i]){ f[i] = max(f[i],f[j]+1); } } } for(int i=n;i>0;i--){ for(int j=n;j>i;j--){ if(data[j]<data[i]){ g[i] = max(g[i],g[j]+1); } } } ans = -1; // for(int i=1;i<=n;i++){ // if((i>1&&data[i-1]==data[i])||(i<n&&data[i]==data[i+1])){ // ans = max(ans,f[i]+g[i]); // }// else{ // ans = max(ans,f[i]+g[i]-1); // } // } for(int i=1;i<=n;i++){ for(int j=i+1;j<=n;j++){ ans = max(ans,f[i]+g[j]); } } cout<<n-ans<<endl; } return 0; }