Cod sursa(job #166836)

Utilizator za_wolfpalianos cristian za_wolf Data 28 martie 2008 15:51:42
Problema Peste Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#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;
}