算法ACMdp基础:poj1887
xucanxx题目
最长不上升子序列
所有输入数据都是非负整数,且小于等于32767。每组数据最后一个数为-1。保证每组数据数量大小不超过1e5
Output
每个测试的输出包括一个测试编号以及答案(具体看样例)。每组样例中间有一个空行
Examples
389
207
155
300
299
170
158
65
-1
23
34
21
-1
-1
Output
Test #1:
maximum possible interceptions: 6
Test #2:
maximum possible interceptions: 2
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| #include<stdio.h> int num[50000],len; int solve(int k) { int r=len,l=1,mid; while(r>l) { mid=(r+l)/2; if(num[mid]>=k) { l=mid+1; } else r=mid; } return r; } int main() { int k,t=1; while(~scanf("%d",&k)&&k!=-1) { len=1; num[len]=k; while(~scanf("%d",&k)&&k!=-1) { if(num[len]>=k) { num[++len]=k; } else { num[solve(k)]=k; } } if(t!=1) printf("\n"); printf("Test #%d:\n",t++); printf(" maximum possible interceptions: %d\n",len); } return 0; }
|