问题是,
给定具有N个整数的数组A,输出使序列不减少所需的最小操作数。
操作表示在数组A [i]中选择一个数字,将其相加为A [i + 1]或A [i - 1],并删除A [i]
问题的链接(西班牙语):https://omegaup.com/arena/problem/Torres#problems
示例:
3
5 2 1
Answer: 2
在这种情况下,我们必须加入所有数字,将序列转换为{8},这是非去世的
限制:
N <= 5000
A[i] <= 10^5
我认为这个问题可以通过DP来解决,但是我无法找到能够以一种小而正确的方式表示问题的状态。
提前致谢。
答案 0 :(得分:0)
编辑:我错了。。以下算法无法解决问题。
可以从左到右进行一次线性扫描。让我解释一下我的推理:
如果您加入两个号码A[i]
和A[i+1]
,则结果大于A[i]
。如果A [i]左边的部分已经非递减,则A[i] < A[i-1]
需要执行此操作。
不必要地加入A[i]
和A[i+1]
会消耗一项操作并使加入更加困难,所以我们只在必要时才这样做。
A[i] < A[i-1]
,请加入A[i]
和A[i+1]
,直到A[i] >= A[i-1]
。A[i] >= A[i-1]
,请递增i。 P.S。原始问题说明指出A[i]
位于1...10^5
范围内,因此明确排除负数,这对算法很重要。