Submission #750257

#TimeUsernameProblemLanguageResultExecution timeMemory
750257jmyszka2007구경하기 (JOI13_watching)C++17
100 / 100
122 ms16064 KiB
#include <bits/stdc++.h>
using namespace std;
int tab[2010];
int dp[2010][2010];
int n, p, q;
bool check(int x) {
	int pop1 = 1;
	int pop2 = 1;
	for(int i = 1; i <= n; i++) {
		while(tab[i] - tab[pop1] + 1 > x) {
			pop1++;
		}
		while(tab[i] - tab[pop2] + 1 > 2 * x) {
			pop2++;
		}
		dp[i][0] = dp[pop2 - 1][0] + 1;
		for(int j = 1; j <= p; j++) {
			dp[i][j] = min(dp[pop1 - 1][j - 1], dp[pop2 - 1][j] + 1);
		}
	}
	int ans = 1e9;
	for(int j = 0; j <= p; j++) {
		ans = min(ans, dp[n][j]);
	}
	return ans <= q;
}
int main() {
	//ios_base::sync_with_stdio(0);
	//cin.tie(0);
	cin >> n >> p >> q;
	for(int i = 1; i <= n; i++) {
		cin >> tab[i];
	}
	sort(tab + 1, tab + n + 1);
	if(p >= n || q >= n) {
		cout << 1 << '\n';
		return 0;
	}
	int l = 1;
	int r = 1e9;
	while(l < r) {
		int mid = (l + r) / 2;
		if(check(mid)) {
			r = mid;
		}
		else {
			l = mid + 1;
		}
	}
	cout << l << '\n';
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...