Pagini recente » Cod sursa (job #558576) | Cod sursa (job #1970351) | Clasament fmi-no-stress-9-warmup | Borderou de evaluare (job #2012059) | Cod sursa (job #2097810)
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 5e4 + 5;
const int MAXT = 1e3 + 5;
pair <int, int> v[MAXN];
int best[MAXT], fr[MAXT];
int dp[MAXN];
int main() {
ifstream cin("peste.in");
ofstream cout("peste.out");
int i, n, k, total, j;
ios::sync_with_stdio(false);
cin >> n >> k >> total;
for(i = 1; i <= n; i++) {
cin >> v[i].second >> v[i].first;
}
sort(v + 1, v + n + 1);
int p = 1;
for(i = 1; i < MAXT; i++) {
while(p <= n && v[p].first <= i) {
fr[v[p].second]++;
p++;
}
int cnt, sum, sz;
sz = min(p - 1, k);
cnt = sum = 0;
for(j = MAXT - 1; cnt < sz; j--) {
if(cnt + fr[j] <= sz) {
cnt += fr[j];
sum += j * fr[j];
}
else {
sum += (sz - cnt) * j;
cnt = sz;
}
}
best[i] = sum;
}
for(i = 1; i <= total; i++) {
for(j = 1; j <= min(i, MAXT - 1); j++) {
dp[i] = max(dp[i], dp[i - j] + best[j]);
}
}
cout << dp[total];
cin.close();
cout.close();
return 0;
}