码迷,mamicode.com
首页 > 其他好文 > 详细

CF360B Levko and Array

时间:2020-03-04 23:11:23      阅读:73      评论:0      收藏:0      [点我收藏+]

标签:print   复杂度   https   code   can   namespace   scanf   ret   signed   

CF360B Levko and Array

一看就二分答案,然后怎么判断就……

可以DP.

设 f[i] 为第i个数不修改情况,然后找到 abs(a[i]-a[j])<=(i-j)*x 就是可以转移的情况了。暴力枚举j,外套一层i,\(O(n^2)\) 判断, \(O(\log n)\) 二分,总时间复杂度 \(O(n^2 \log n)\)

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=2005;
int n,k,a[N],l,r,ans; 
bool check(int x) {
    int f[N]={0};
    for(int i=1;i<=n;++i) {
        f[i]=i-1;
        for(int j=1;j<i;++j) {
            if(abs(a[i]-a[j])<=(i-j)*x)
                f[i]=min(f[i],f[j]+i-j-1);
        }
        if(f[i]+n-i<=k)return true;
    }
    return false;
}
signed main() {
    scanf("%lld%lld",&n,&k);
    for(int i=1;i<=n;++i)
        scanf("%lld",&a[i]);
    for(int i=1;i<n;++i)
        r=max(r,abs(a[i]-a[i+1]));
    while(l<=r) {
        int mid=(l+r)>>1;
        if(check(mid))ans=mid,r=mid-1;
        else l=mid+1;
    }
    printf("%lld\n",ans);
    return 0;
}

CF360B Levko and Array

标签:print   复杂度   https   code   can   namespace   scanf   ret   signed   

原文地址:https://www.cnblogs.com/zzctommy/p/12416542.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!