Cod sursa(job #496329)

Utilizator zloteanu.adrianzloteanu adrian nichita zloteanu.adrian Data 28 octombrie 2010 16:32:43
Problema Lapte Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include<fstream>
#include<string.h>
using namespace std;
ifstream q("lapte.in");
ofstream w("lapte.out");
long s=0,d=100,m,i,n,l,m1[85][85],m2[85][85],a[85],b[85];
long bun(long t)
{long i,j,k,xx,mk;
memset(m1,-1,sizeof(m1));
m1[0][0]=0;
for(i=0;i<n;++i)
  for(j=0;j<=l;++j)
   if(m1[i][j]>=0)
    {mk=t/a[i+1];
    if(l-j<mk)mk=l-j;
     for(k=mk;k>=0;--k)
       {xx=m1[i][j]+(t-k*a[i+1])/b[i+1];
       if(m1[i+1][j+k]<xx)
        {m2[i+1][j+k]=j;
        m1[i+1][j+k]=xx;}}}
return (m1[n][l]>=l);}
void caut()
{while(s<d)
   {m=(s+d)/2;
   if(bun(m))
    d=m;
   else
    s=m+1;}}
void B(long i,long j)
{if(!i)
  return;
long xx=m1[i][j]-m1[i-1][m2[i][j]];
B(i-1,m2[i][j]);
w<<j-m2[i][j]<<" "<<xx<<"\n";}
int main()
{q>>n>>l;
for(i=1;i<=n;++i)
  q>>a[i]>>b[i];
caut();
bun(s);
w<<s<<"\n";
B(n,l);
return 0;}