#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ld double
#define FOR(i,l,r) for(int i = (l), _r = (r); i <= _r; i++)
#define FORNG(i,r,l) for(int i = (r), _l = (l); i >= _l; i--)
#define REP(i,r) for(int i = 0, _r = (r); i < _r; i++)
#define endl '\n'
#define fi first
#define se second
#define pb push_back
#define size(v) ((int)(v).size())
#define all(v) (v).begin(),(v).end()
#define MASK(x) (1LL << (x))
#define BIT(x, i) (((x) >> (i)) & 1)
const ll MOD = 1e9 + 7, N = 2036, LOG = 20, LIM = 30;
const int INF = 1e9 + 36;
int n,p,q,a[N];
int dp[N][N];
bool check(int w){
FOR(i,0,n)FOR(j,0,min(n, p))dp[i][j] = INF;
dp[0][0] = 0;
FOR(i,1,n)FOR(cntUsedP,0,min(i, p)){
FORNG(t,i,1){
if(a[i] - a[t] + 1 > w * 2)break;
if(a[i] - a[t] + 1 <= w && cntUsedP)dp[i][cntUsedP] = min(dp[i][cntUsedP], dp[t - 1][cntUsedP - 1]);
dp[i][cntUsedP] = min(dp[i][cntUsedP], dp[t - 1][cntUsedP] + 1);
}
}
FOR(i,0,min(n, p)){
if(dp[n][i] <= q)return 1;
}
return 0;
}
int main(){
ios_base::sync_with_stdio(0);cin.tie(0);
cin>>n>>p>>q;
FOR(i,1,n)cin>>a[i];
sort(a + 1, a + 1 + n);
int l = 1, r = 1e9, ans = -1;
while(l <= r){
int mid = (l + r) >> 1;
if(check(mid))ans = mid, r = mid - 1;
else l = mid + 1;
}
cout<<ans;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |