/*
防御导弹
http://acm.tongji.edu.cn/people/ps/showproblem.php?problem_id=1004
Time Limit:1s Memory Limit:1000k
Total Submit:4585 Accepted:1439
Time Limit:1s Memory Limit:1000k
Total Submit:4585 Accepted:1439
Time Limit:1s Memory Limit:1000k
Total Submit:4585 Accepted:1439
--------------------------------------------------------------------------------
Problem
某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够达到任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在使用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。
Input
最多20个整数,分别表示导弹依次飞来的高度(雷达给出高度数据是不大于30000的正整数)
Output
两个整数M和N。表示:这套系统最多能拦截 M 枚导弹,如果要拦截所有导弹最少要配备 N 套这种导弹系统。
Sample Input
300 250 275 252 200 138 245
Sample Output
5 2
*/
#include <stdio.h>
int main()
{
int decv[20], decx[20];
int height[20], mask[20];
int i, j, M, N, count, left, max, idx;
count = 0;
while (scanf("%d", &height[count]) != EOF)
count++;
for (i=0; i<count; i++)
mask[i] = 1;
left = count;
M = N = 0;
while (left > 0)
{
max = 0;
for (i=count-1; i>=0; i--)
if (mask[i])
{
decv[i] = 1;
decx[i] = -1;
for (j=i+1; j<count; j++)
if (mask[j])
{
if (height[i] >= height[j] && decv[i] < 1+decv[j])
{
decv[i] = 1+decv[j];
decx[i] = j;
}
}
if (max < decv[i])
{
max = decv[i];
idx = i;
}
}
if (M < max)
M = max;
left -= max;
N++;
i = idx;
while (i != -1)
{
mask[i] = 0;
i = decx[i];
}
}
printf("%d %d/n", M, N);
return 0;
}