Pagini recente » Cod sursa (job #1081119) | Cod sursa (job #287027) | Cod sursa (job #2349282) | Cod sursa (job #1952345) | Cod sursa (job #164521)
Cod sursa(job #164521)
#include<stdio.h>
#include<vector>
#include<queue>
#include<algorithm>
using namespace std;
#define lg 50005
int n, k, total, i, j, sm, d[1005], maxt, x, x1, x2;
long long raspuns, rz[lg];
char sir[20];
struct ches{
int c, t;
};
ches v[lg];
inline int cmp(ches a, ches b){
return a.t < b.t;
}
class mmc{
public:
bool operator()(int a, int b){
return a > b;
}
};
int main()
{
freopen("peste.in", "rt", stdin);
freopen("peste.out", "wt", stdout);
scanf("%d%d%d\n", &n, &k, &total);
for (i = 1; i <= n; i ++)
scanf("%d%d", &v[i].c, &v[i].t);
sort(v+1, v+n+1, cmp);
maxt = v[n].t;
priority_queue<int, vector<int>, mmc> hp;
for (i = 1; i <= k; i ++){
sm += v[i].c;
d[v[i].t] = sm;
hp.push(v[i].c);
}
for (i = k+1; i <= n; i ++){
x = hp.top();
hp.pop();
sm -= x;
sm += v[i].c;
d[v[i].t] = max(sm, d[v[i].t]);
hp.push(v[i].c);
}
rz[0] = 1;
for (i = 1; i <= maxt; i ++)
if (d[i])
for (j = 0; j <= total; j ++)
if (rz[j]){
if (i+j <= total)
if (d[i] + rz[j] > rz[i+j]){
rz[i+j] = (long long)(d[i] + rz[j]);
if (rz[i+j] > raspuns)
raspuns = rz[i+j];
}
}
printf("%lld\n", raspuns-1);
return 0;
}