【题目来源】
【题目描述】
一共 n 棵树排成一排,初始时,相邻两个树的距离都相等。
请你砍掉其中尽可能少的树,使得剩余树的高度构成非递减序列且相邻树木之间的距离都相等。
【输入格式】
输入包含多组测试数据。
每组数据第一行包含整数 n。
第二行包含 n 个整数,表示树的高度。
【输出格式】
每组数据输出一行结果,表示最少需要砍掉的树木。
【输入样例】
6
6 5 4 3 2 1
10
1 9 2 8 3 2 4 6 5 2
5
1 2 6 2 4
【输出样例】
5
5
2
【数据范围】
1≤n≤1000,
树的高度范围 [1,10000]。
输入最多包含 100 组数据。
【算法分析】
● 状态 f[i][j]
f[i][j] 表示以第 i 个元素结尾、步长为 j 的最长非递减子序列的元素个数。
● 状态转移方程
若 i-j 位置有效且 a[i-j] ≤ a[i],则 f[i][j] = f[i-j][j]+1,否则 f[i][j]=1。
● 最终结果
需要删除的元素个数 = 数组总长度 - 最长符合条件子序列的长度。
【算法代码】
【参考文献】