Cod sursa(job #501261)

Utilizator sanda-mariaPatras Sanda sanda-maria Data 14 noiembrie 2010 17:29:25
Problema Lapte Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 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[101][101],m2[101][101],a[101],b[101];

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;}