之前做这题一点思路都没有,现在感觉思路很清晰,这可能就是思想上的提高吧,加油,多踢球多参加一些活动,多看一些书,多刷题,这样就会提高。
就是个波动序列,没什么难的。
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,后加的所以破坏了队形。。。