Pagini recente » Cod sursa (job #467062) | Cod sursa (job #1509188) | Cod sursa (job #1734202) | Cod sursa (job #2526599) | Cod sursa (job #164103)
Cod sursa(job #164103)
#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[2005];
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;
b[nr].a=b[x].a;
b[nr].b=b[x].b;
b[nr].nr=b[x].nr;
}
if (b[nr].nr!=k)
{
b[nr].nr++;
b[nr].a+=a[e[i]].a;
if (a[e[i]].a<b[nr].b)
b[nr].b=a[e[i]].a;
cod[a[e[i]].a]++;
}
else
{
if (b[nr].b<a[e[i]].a)
{
cod[b[nr].b]--;
cod[a[e[i]].a]++;
b[nr].a+=a[e[i]].a-b[nr].b;
for (j=0;j<=2000;j++)
if (cod[j])
{
b[nr].b=j;
break;
}
}
}
}
c[0]=1;
max=1;
for (j=1;j<=nr;j++)
for (i=0;i<=t;i++)
{
if (i+b[j].o<=t&&c[i])
{
if (c[i+b[j].o]<c[i]+b[j].a)
c[i+b[j].o]=c[i]+b[j].a;
}
}
for (i=1;i<=t;i++)
if (c[i]>max)
max=c[i];
if (max)
max--;
fprintf(out,"%lld\n",max);
fclose(in);
fclose(out);
return 0;
}