Pagini recente » Cod sursa (job #2470829) | Cod sursa (job #2219998) | Cod sursa (job #2509503) | Cod sursa (job #419671) | Cod sursa (job #1603647)
#include <bits/stdc++.h>
#define maxN 50002
#define maxT 1002
#define ll long long
using namespace std;
int n, m, k, t, T;
struct fish
{
int p, t;
} v[maxN];
long long sum[maxT], dp[maxN];
priority_queue < int > s;
ll Max(ll a, ll b)
{
if (a > b)
return a;
return b;
}
int Min(int a, int b)
{
if (a < b)
return a;
return b;
}
int cmp(const fish a, const fish b)
{
if (a.t == b.t)
return a.p < b.p;
return a.t < b.t;
}
void read()
{
int i;
freopen("peste.in", "r", stdin);
scanf("%d %d %d", &n, &k, &t);
for (i = 1; i <= n; ++ i)
scanf("%d %d", &v[i].p, &v[i].t);
}
void get_fish()
{
int i, j;
sort(v + 1, v + n + 1, cmp);
for (i = 1; i <= n; ++ i)
{
sum[v[i].t] = sum[v[i - 1].t] + v[i].p;
s.push(-v[i].p);
if (i < k)
{
sum[v[i].t] += s.top();
s.pop();
}
T = max(T, v[i].t);
}
}
void go_fish()
{
int i, j;
for (i = 1; i <= t; ++ i)
for (j = 1; j <= Min(i, T); ++ j)
dp[i] = Max(dp[i], dp[i - j] + sum[j]);
}
void solve()
{
get_fish();
go_fish();
}
void write()
{
freopen("peste.out", "w", stdout);
printf("%lld\n", dp[t]);
}
int main()
{
read();
solve();
write();
return 0;
}