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 }

 

posted @ 2012-10-21 22:00  sidereal  Views(152)  Comments(0)    收藏  举报