#include <iostream.h> #include <malloc.h> #include <string.h> #include <stdio.h> #include <stdlib.h> void max( int *height, int len ){ int i,j,max[2000],time[2000],max_intercept=0,max_time=0; for (i=0; i<len; ++i) {max[i]=1;time[i]=0;} for (i=1; i<len; ++i) for (j=0; j<i; ++j) if (height[i]<=height[j] && max[j]+1>max [i]) max[i]=max[j]+1; for (i=0; i<len; ++i) if (max[i]>max_intercept) max_intercept=max[i]; cout <<max_intercept<<endl; } void need( int *t, int len ){ int *min = new int[len], i=0, need=0, tem=0; int m1 = 0, m2 =0, tt; min[0] = 0; while( i<=len-1 ){ tem = i; tt = tem; while( t[tem] >= t[tem+1] ) tem++; i = 1 + tem; m2= min[0]; for( int j=0; j<=m1; j++ ) if( m2<= min[j] ) m2 = min[j]; if( t[tt] > m2 ) need++; min[m1++] = t[tem]; } cout<< need<<endl; } int main(){ int i = 0; int *t; char ch; while( 1 ) { i = 0; t = (int *)malloc( sizeof(int) *10 ); cin>>t[i]; if( t[0] == 0 ) exit( 0 ); else{ cin.get( ch ); while( ch !='\n' ){ if( i==9 ) t = (int *)realloc( t, sizeof(int) *( i+11 ) ); cin>> t[++i]; cin.get( ch ); } max(t,i+1 ); need(t,i+1 ); free(t); } } return 0; }

评论