Pagini recente » Cod sursa (job #983302) | Cod sursa (job #1483761) | Istoria paginii runda/9titus | Cod sursa (job #1205457) | Cod sursa (job #2097857)
#include <bits/stdc++.h>
using namespace std;
const int MAXN = (int) 5e4;
const int MAXT = (int) 1e3;
pair <int, int> v[MAXN + 1];
int best[MAXT + 1], fr[MAXT + 1];
int dp[MAXN + 1];
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; 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); j++) {
dp[i] = max(dp[i], dp[i - j] + best[j]);
}
}
cout << dp[total];
cin.close();
cout.close();
return 0;
}