Pagini recente » Cod sursa (job #1620246) | Cod sursa (job #486890) | Cod sursa (job #2224951) | Cod sursa (job #86683) | Cod sursa (job #474299)
Cod sursa(job #474299)
#include<stdio.h>
#define N 105
long s,d,m,ok,tmin,i,l,x[N][N],ta[N],tb[N],n,j,y[N],k,ca[N][N],cb[N][N],
sa[N],sb[N];
void citire();
void dinamica();
void print_sol();
int main()
{ citire();
s=0;d=101;
while(d-s-1)
{ m=(s+d)/2;
ok=0;
dinamica();
if(ok)d=m;
else s=m;
}
print_sol();
return 0;
}
void dinamica()
{ long time;
for(i=0;i<=l;i++)x[0][i]=-1;x[0][0]=0;
for(i=1;i<=n;i++)
{ for(j=0;j<=l;j++){y[j]=-1;x[i][j]=-1;}
for(j=0;j<=l;j++)
{ time=m-j*ta[i];
if(time<0)break;
y[j]=time/tb[i];
}
for(j=0;j<=l;j++)
for(k=0;k<=j;k++)
{ if(y[k]==-1)break;
if(x[i-1][j-k]==-1)continue;
if(x[i][j]<y[k]+x[i-1][j-k])
{ x[i][j]=y[k]+x[i-1][j-k];
ca[i][j]=k;cb[i][j]=y[k];
}
}
if(x[i][l]>=l)
{ ok=1;tmin=m;
for(j=i+1;j<=n;j++){ sa[j]=0;sb[j]=0;}
sa[i]=ca[i][l];sb[i]=cb[i][l];k=l;
for(j=i-1;j>=1;j--)
{ k-=sa[j+1];sa[j]=ca[j][k];sb[j]=cb[j][k];}
return;
}
}
}
void citire()
{
freopen("lapte.in","rt",stdin);
scanf("%ld%ld",&n,&l);
for(i=1;i<=n;i++) scanf("%ld%ld",&ta[i],&tb[i]);
tmin=101;
}
void print_sol()
{
freopen("lapte.out","wt",stdout);
printf("%ld\n",tmin);
for(i=1;i<=n;i++)printf("%ld %ld\n",sa[i],sb[i]);
}