hrb_oj_1131_波动序列

之前做这题一点思路都没有,现在感觉思路很清晰,这可能就是思想上的提高吧,加油,多踢球多参加一些活动,多看一些书,多刷题,这样就会提高。

就是个波动序列,没什么难的。

 1 #include <stdio.h>
 2 bool sign[30000+10];  //0代表高  1代表低
 3 int  num[30000+10];
 4 int  dp[30000+10];
 5 int main()
 6 {
 7     int n,i,j,max;
 8     int t;
 9     while(scanf("%d",&t)!=EOF)
10     {
11         while(t--){
12         scanf("%d",&n);
13         max=0;
14         for(i=1;i<=n;++i)
15         {
16             scanf("%d",&num[i]);
17             sign[i]=0;  
18             dp[i]=1;
19         }
20         dp[0]=1;
21         for(i=1;i<=n;++i)
22         {
23             for(j=i-1;j>0;--j)
24             {
25                 if(sign[j]==1&&num[i]>num[j]&&dp[i]<dp[j]+1)
26                 {
27                     
28                     dp[i]=dp[j]+1;
29                     sign[i]=0;
30                     break;
31                 }
32                 else if(sign[j]==0&&num[i]<num[j]&&dp[i]<dp[j]+1)
33                 {
34                     dp[i]=dp[j]+1;
35                     sign[i]=1;
36                     break;
37                 }
38             }
39             if(dp[i]==1) dp[i]=dp[i-1];
40             if(max<dp[i]) max=dp[i];
41         }
42         printf("%d\n",max);
43     }
44     }
45     return 0;
46 }
47 
48     

代码打的不是很文艺了,关键是开始没看见得先输入T,后加的所以破坏了队形。。。

原文地址:https://www.cnblogs.com/symons1992/p/2776231.html