Pagini recente » Cod sursa (job #452807) | Cod sursa (job #182869) | Cod sursa (job #339746) | Cod sursa (job #722543) | Cod sursa (job #257064)
Cod sursa(job #257064)
#include <cstdio>
#define lm 110
int a[lm], b[lm], v[lm][lm], c[lm][lm], n, l, r1[lm], r2[lm], C[lm][lm];
bool verif(int t)
{
int i, j, x, k;
for (i=1; i<=n; i++)
for (j=0; j<=l; j++) v[i][j]=0;
for (j=0; j<=t; j++) v[1][j]=t-j;
for (i=2; i<=n; i++)
for (j=0; j<=l; j++)
for (x=0; x<=t; x++)
{
k=v[i-1][j-x/a[i]]+(t-x)/b[i];
if (k>v[i][j])
{
v[i][j]=k;
c[i][j]=x;
}
}
if (v[n][l]>=l)
{
for (i=1; i<=n; i++)
for (j=0; j<=l; j++) C[i][j]=c[i][j];
return 1;
} else
return 0;
}
int caut(int a, int b)
{
int m, r;
while (a<=b)
{
m=(a+b)/2;
if (verif(m))
{
b=m-1;
r=m;
} else a=m+1;
}
return r;
}
int main()
{
freopen("lapte.in","r",stdin);
freopen("lapte.out","w",stdout);
scanf("%d %d",&n,&l);
int i;
for (i=1; i<=n; i++) scanf("%d %d",&a[i],&b[i]);
int r=caut(1,l);
printf("%d\n",r);
int k=l;
for (i=n; i>0; i--)
{
r1[i]=C[i][k]/a[i];
r2[i]=(r-C[i][k])/b[i];
k=k-C[i][k]/a[i];
}
for (i=1; i<=n; i++) printf("%d %d\n",r1[i],r2[i]);
}