Pagini recente » Cod sursa (job #2056095) | Cod sursa (job #2003009) | Istoria paginii runda/usu5/clasament | Cod sursa (job #433337) | Cod sursa (job #164047)
Cod sursa(job #164047)
#include <stdio.h>
#include <stdlib.h>
struct ceva
{
long long a,b;
};
struct ceva2
{
long long a,o,nr,b;
};
long long c[50005];
ceva a[50005];
ceva2 b[1005];
long long e[50005];
long long cod[1005];
long long max,nr,i,j,k,n,t,x,p=1,u=0;
int compare(const void *a2,const void *b2)
{
long long *aa=(long long *)a2,*bb=(long long*)b2;
if (a[*aa].b>a[*bb].b)
return 1;
if (a[*aa].b<a[*bb].b)
return -1;
return 0;
}
int main()
{
FILE *in,*out;
in=fopen("peste.in","r");
out=fopen("peste.out","w");
fscanf(in,"%lld%lld%lld",&n,&k,&t);
for (i=1;i<=n;i++)
{
fscanf(in,"%lld%lld",&a[i].a,&a[i].b);
e[i]=i;
}
qsort(e+1,n,sizeof(e[1]),compare);
for (i=1;i<=n;i++)
{
x=nr;
if (a[e[i]].b!=b[nr].o)
{
nr++;
b[nr].o=a[e[i]].b;
}
if (b[x].nr!=k)
{
b[nr].nr=b[x].nr+1;
if (a[e[i]].a<b[x].b)
b[nr].b=a[e[i]].a;
b[nr].a=b[x].a-b[x].b+a[e[i]].a;
cod[a[e[i]].a]++;
}
else
{
b[nr].nr=k;
if (b[x].b<a[e[i]].a)
{
cod[b[x].b]--;
cod[a[e[i]].a]++;
for (j=1;j<=1000;j++)
if (cod[j])
{
b[nr].b=j;
break;
}
b[nr].a=b[x].a-b[x].b+a[e[i]].a;
}
else
{
b[nr].a=b[x].a;
b[nr].b=b[x].b;
}
}
}
c[0]=1;
for (j=1;j<=nr;j++)
for (i=0;i<=t;i++)
{
if (i+b[j].o<=t&&c[i])
{
c[i+b[j].o]=c[i]+b[j].a;
if (max<c[i+b[j].o])
max=c[i+b[j].o];
}
}
if (max)
max--;
fprintf(out,"%lld",max);
fclose(in);
fclose(out);
return 0;
}