Pagini recente » Cod sursa (job #473008) | Cod sursa (job #1683923) | Monitorul de evaluare | Cod sursa (job #1019939) | Cod sursa (job #166836)
Cod sursa(job #166836)
#include<stdio.h>
#define NMAX 1001
long i,n,j,max,k,T;
struct kkt
{
long P,T;
};
kkt x[NMAX];
struct coi
{
long T,Q;
};
coi z[NMAX];
int main()
{
freopen("peste.in","r",stdin);
freopen("peste.out","w",stdout);
scanf("%ld%ld%ld",&n,&k,&T);
for (i=1;i<=n;i++)
{
scanf("%ld%ld",&x[i].P,&x[i].T);
if (z[x[i].P].T<x[i].T||z[x[i].P].T==0)
{
z[x[i].P].T=x[i].T;
z[x[i].P].Q=1;
}
}
for (i=1;i<=n;i++)
for (j=1;j<=1000;j++)
if (!(z[j].T==x[i].T&&z[j].Q==1))
if (z[j].T+x[i].T<=T&&z[j].Q+1<=k&&z[j].T)
{
z[j+x[i].P].T=z[j].T+x[i].T;
z[j+x[i].P].Q=z[j].Q+1;
}
for (i=1;i<=n;i++)
if (z[i].T)
for (j=1;j<=n;j++)
if (z[j].T&&z[i+j].T<z[i].T+z[j].T&&z[i].Q+z[j].Q<=k&&z[i].T+z[j].T<=T)
{
z[i+j].T=z[i].T+z[j].T;
z[i+j].Q=z[i].Q+z[j].Q;
}
max=-1;
for (i=1;i<=1000;i++)
if (z[i].T&&z[i].T<=T&&z[i].T<=T&&z[i].Q<=k)
max=i;
printf("%ld\n",max);
return 0;
}