sicily1685
只需在最长上升子序列中多加一个判断条件即可
View Code
1 #include <iostream> 2 using namespace std; 3 double missile[1001]; 4 int dp[1001]; 5 int main() 6 { 7 int n; 8 while(1) 9 { 10 cin>>n; 11 if(n==0) 12 break; 13 for(int i=1;i<=n;i++) 14 cin>>missile[i]; 15 dp[1]=1; 16 for(int i=2;i<=n;i++){ 17 int tmp=0; 18 for(int k=1;k<=i-1;k++){ 19 if(dp[k]%2==1 && missile[i]<missile[k] && tmp<dp[k]) //current should be even 20 tmp=dp[k]; 21 else if(dp[k]%2==0 && missile[i]>missile[k] && tmp<dp[k])//current should be odd 22 tmp=dp[k]; 23 } 24 dp[i]=1+tmp; 25 26 } 27 int max=0; 28 for(int i=1;i<=n;i++){ 29 if(dp[i]>max) 30 max=dp[i]; 31 } 32 cout<<max<<endl; 33 } 34 return 0; 35 }


浙公网安备 33010602011771号