Cod sursa(job #487533)

Utilizator taloibogdanTaloi Bogdan Cristian taloibogdan Data 25 septembrie 2010 14:39:17
Problema Lapte Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include<stdio.h>
#include<string.h>
long n,l,x[105][105],u[105][105],a[105],b[105],i;
void rec(long i,long j)
{if(!i)return;
 long xx=x[i][j]-x[i-1][u[i][j]];
 rec(i-1,u[i][j]);
 printf("%ld %ld\n",j-u[i][j],xx);
}
long bun(long t)
{long i,j,k,xx,mk;
 memset(x,-1,sizeof(x));
 x[0][0]=0;
 for(long i=0;i<n;++i)
 for(long j=0;j<=l;++j)
 if(x[i][j]>=0)
   {mk=t/a[i+1];
    if(l-j<mk)mk=l-j;
    for(k=1;k<=mk;++k)
       {xx=x[i][j]+(t-k*a[i+1])/b[i+1];
       if(x[i+1][j+k]<xx)
         {u[i+1][j+k]=j;
          x[i+1][j+k]=xx;}}}
 return (x[n][l]>=l);
}
void bina()
{long st=0,dr=100,m;
 while(st<dr)
  {m=(st+dr)/2;
   if(bun(m))dr=m;
   else st=m+1;}
 bun(st);
 printf("%ld\n",st);
 rec(n,l);
}
int main()
{
 freopen("lapte.in","r",stdin);
 freopen("lapte.out","w",stdout);
 scanf("%ld%ld",&n,&l);
 for(i=1;i<=n;++i)
    scanf("%ld%ld",&a[i],&b[i]);
 bina();
 return 0;
}