这个问题:
Description
现在有一个数列,需要你求得该数列满足下述要求的最长子数列。子数列要求:这个子数列可以被分成前后两个部分,且两部分共同拥有一个数列项(即前一部分的最后一个数列项和后一部分的第一个数列项是同一个数列项);子数列的前一部分各项要严格递增,后一部分各项要严格递减。例如,数列 1 4 6 5 2 1 可以分成 1 4 6 和 6 5 2 1 这两部分。他们都含有数列项 6 ,且前者各项严格递增,后者各项严格递减。
请你编写程序回答,对一个数列最少剔除几项,就可使剩下的各项组成的子数列满足上述的要求。
Input
输入数据有若干组。每组的第一行为整数 n (1 <= n <= 50) 表示数列的项数,第二行的 n 个整数即为该数列的各项,范围 1 到 1000000000 。
Output
输出最少需要剔除数列中的几项。一个结果一行。
Sample Input
6
1 4 6 5 2 1
5
2 2 2 2 2
Sample Output
0
4
Hint
不明白输入输出方法的同学请看:
使用标准输入cin,cout,scanf,printf即可,不用读文件。数据读入一组,处理一组,输出一组。
为什么我老是wrong answer呢?
我的输入输出明明自己调试的时候是正确的。。。
本来我以为要用双重循环,结果单重循环就搞定了。就跟kmp算法一样,在对比的时候如果 1 2 3 4 3 1 已经对比过了,那么2 3 4 3 1、
3 4 3 1、 4 3 1、 3 1、 1 就不用再对比了。就跟回文是类似的。