Pagini recente » Tudor Maxim | Cod sursa (job #1578891) | Cod sursa (job #2247447) | Cod sursa (job #1332440) | Cod sursa (job #356031)
Cod sursa(job #356031)
#include<stdio.h>
int N,L,ti,ts,tm,CA,TA,CB,TB,U,R,i,j,a;
int A[101],B[101],sa[101],sb[101],
mb[101][101],ca[101][101],cb[101][101];
void read(),solve(),dinamica();
int main()
{
read();
solve();
return 0;
}
void read()
{
freopen("lapte.in","r",stdin);
freopen("lapte.out","w",stdout);
scanf("%d%d",&N,&L);
for(i=1;i<=N;i++)scanf("%d%d",&A[i],&B[i]);
for(j=1;j<=L;j++)mb[0][j]=-1;
}
void solve()
{
for(ti=0,ts=101;ts-ti-1;)dinamica();
printf("%d\n",ts);
for(i=1;i<=U;i++)printf("%d %d\n",sa[i],sb[i]);
for(i=U+1;i<=N;i++)printf("0 0\n");
}
void dinamica()
{
tm=(ti+ts)/2;
for(i=1;i<=N;i++)
{
for(j=0;j<=L;j++){mb[i][j]=mb[i-1][j];ca[i][j]=cb[i][j]=0;}
for(CA=0;;CA++)
{
TA=CA*A[i];
if(TA>tm)break;
TB=tm-TA;
CB=TB/B[i];
for(a=0;;a++)
{
if(a+CA>L)break;
if(mb[i-1][a]==-1)continue;
if(mb[i][a+CA]>=mb[i-1][a]+CB)continue;
mb[i][a+CA]=mb[i-1][a]+CB;
ca[i][a+CA]=CA;
cb[i][a+CA]=CB;
}
if(mb[i][L]>=L)
{
U=i;R=L;
for(i=U;i>=1;i--)
{
sa[i]=ca[i][R];
sb[i]=cb[i][R];
R-=sa[i];
}
ts=tm;
return;
}
}
}
ti=tm;
}