HDU1257
这个思想挺好
1 #include<stdio.h>
2 #include<
string.h>
3 int main()
4 {
// freopen("C:\\Users\\Sky\\Desktop\\1.in","r",stdin);
5 int n,i,j,x,m,dp[
1005];
6 while(scanf(
"%d",&n)!=EOF&&
n)
7 {
8 memset(dp,
0,
sizeof(dp));
9 dp[
1]=
0;m=
0;
10 for(i=
1;i<=n;i++
)
11 {
12 scanf(
"%d",&
x);
13 for(j=
1;j<=m;j++
)
14 if(x<=
dp[j])
15 {dp[j]=x;
break;}
//dp保存了当前每条子列的最后一个元素
16 if(j>m){dp[++m]=x;}
//所有最后一个元素都不比x大,x为新的子列头
17 }
18 printf(
"%d\n",m);
19 }
20 return 0;
21 }
View Code
转载于:https://www.cnblogs.com/Skyxj/p/3200355.html
转载请注明原文地址: https://win8.8miu.com/read-1541179.html