标签:
第二行,输入k个正整数,表示k枚导弹的高度,按来袭导弹的袭击时间顺序给出,以空格分隔。
8 300 207 155 300 299 170 158 65
6
1 #include <cstdio> 2 #include <cstdlib> 3 #include <cstring> 4 #include <string> 5 #define MAX 30 6 using namespace std; 7 8 int num[MAX]; 9 int count[MAX]; 10 11 int main(int argc, char const *argv[]) 12 { 13 int n; 14 //freopen("input.txt","r",stdin); 15 16 while(scanf("%d",&n) != EOF) { 17 if(n <= 0) { 18 printf("0\n"); 19 continue; 20 } 21 for(int i = 0; i < n; i++) { 22 scanf("%d",&num[i]); 23 count[i] = 1; 24 } 25 count[n - 1] = 1; 26 int max = 1; 27 for(int j = n - 2; j >= 0; j--) { 28 int maxMin = -1; 29 for(int k = j + 1; k < n; k++) { 30 if(num[k] <= num[j] && maxMin == -1) { 31 maxMin = k; 32 } 33 else if(num[k] <= num[j] && count[k] > count[maxMin]) { 34 maxMin = k; 35 } 36 } 37 if(maxMin != -1) { 38 count[j] = count[maxMin] + 1; 39 } 40 if(max < count[j]) { 41 max = count[j]; 42 } 43 } 44 printf("%d\n",max); 45 /*for(int i = 0; i < n; i++) { 46 printf("%d ",count[i]); 47 } 48 printf("\n");*/ 49 } 50 51 return 0; 52 }
做这道题是脑子犯了糊涂,在33行应比较count而不是比较num,导致错误了3次,此处count[k]取大于或大于等于count[maxMin]均可。
另外需注意n == 0是的情况
标签:
原文地址:http://www.cnblogs.com/jasonJie/p/5684269.html