Pagini recente » Cod sursa (job #8959) | Cod sursa (job #1002999) | Cod sursa (job #2899502) | Cod sursa (job #2615554) | Cod sursa (job #487536)
Cod sursa(job #487536)
#include<stdio.h>
#include<string.h>
long n,l,x[105][105],u[105][105],a[105],b[105],i;
void rec(long i,long j)
{if(!i)return;
long xx=x[i][j]-x[i-1][u[i][j]];
rec(i-1,u[i][j]);
printf("%ld %ld\n",j-u[i][j],xx);
}
long bun(long t)
{long i,j,k,xx,mk;
memset(x,-1,sizeof(x));
x[0][0]=0;
for(long i=0;i<n;++i)
for(long j=0;j<=l;++j)
if(x[i][j]>=0)
{mk=t/a[i+1];
if(l-j<mk)mk=l-j;
for(k=mk;k>=0;--k)
{xx=x[i][j]+(t-k*a[i+1])/b[i+1];
if(x[i+1][j+k]<xx)
{u[i+1][j+k]=j;
x[i+1][j+k]=xx;}}}
return (x[n][l]>=l);
}
void bina()
{long st=0,dr=100,m;
while(st<dr)
{m=(st+dr)/2;
if(bun(m))dr=m;
else st=m+1;}
bun(st);
printf("%ld\n",st);
rec(n,l);
}
int main()
{
freopen("lapte.in","r",stdin);
freopen("lapte.out","w",stdout);
scanf("%ld%ld",&n,&l);
for(i=1;i<=n;++i)
scanf("%ld%ld",&a[i],&b[i]);
bina();
return 0;
}