1
贪心做就好了,每一次接在之前出现过的所有不小于这个数的最小值后面,可以覆盖掉之前的值,如果都比这个数校小, 则cnt++,即多一套系统。
Ac代码比较简单,不写注释
# include <stdio.h> int data[3010]; int ans[3010]; int main(){ int n, i, j, k, temp, cur, flage; int cnt; while(scanf("%d", &n)){ if(n==-1){ break; } cnt=1; for(i=0; i<=n-1; i++){ scanf("%d", &data[i]); } ans[0]=data[0]; for(i=1; i<=n-1; i++){ flage=0; temp=2000000000; for(j=0; j<=cnt-1; j++){ if(data[i]<=ans[j]){ flage=1; if(ans[j]<temp){ temp=ans[j]; cur=j; } } } if(!flage){ ans[cnt++]=data[i]; } else{ ans[cur]=data[i]; } } printf("%d\n", cnt); } return 0; }