#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2005;
int n,k,dp[N],a[N];
bool check(ll m) {
for(int i=n-1;i>=0;i--) {
dp[i]=n-i-1;
for(int j=i+1;j<n;j++)
if(abs(a[j]-a[i])<=m*(ll)(j-i)) dp[i]=min(dp[i],dp[j]+j-i-1);
if(dp[i]+i <= k) return true;
}
return false;
}
int main() {
scanf("%d%d",&n,&k);
for(int i=0;i<n;i++) scanf("%d",&a[i]);
ll l=0,r=2e9,ans=r;
while(l<=r) {
int m=(l+r)>>1;
if(check(m)) r=m-1, ans=m;
else l=m+1;
}
cout<<ans<<'\n';
}
[校内模拟][二分+DP]小C的数组
最新推荐文章于 2018-11-01 23:16:37 发布