Pagini recente » Cod sursa (job #449052) | Cod sursa (job #2695180) | Cod sursa (job #1485125) | Cod sursa (job #2545465) | Cod sursa (job #478357)
Cod sursa(job #478357)
#include <stdio.h>
#define Nmax 152
int A[Nmax],B[Nmax];
int din[Nmax][Nmax],lita[Nmax][Nmax];
int Caf[Nmax],Cbf[Nmax];
int n,L;
int merge(int T){
int i,j,k,q;
for(i=0;i<=n;++i) for(j=1;j<=L;++j) din[i][j]=-1;
for(i=0;i<=n;++i) din[i][0]=0;
for(i=1;i<=n;++i)
for(j=0;j<=L;++j)
for(k=0; k<= T/A[i] && k<=j; ++k)
if( din[i-1][j-k] >= 0 ){
q=(T-k*A[i])/B[i];
if( din[i][j] < din[i-1][j-k] + q){
din[i][j]=din[i-1][j-k] + q;
lita[i][j]=k;
}
}
if( din[n][L] >= L ){ din[n][L]=L; return 1; }
return 0;
}
void afis(int T){
int i,j=L;
printf("%d\n",T);
for(i=n; i>=1; --i){
Caf[i]=lita[i][j];
Cbf[i]=(T-Caf[i]*A[i])/B[i];
j -= Caf[i];
}
for(i=1;i<=n;++i) printf("%d %d\n",Caf[i],Cbf[i]);
}
int main(){
int i,l,r,mij,rez;
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]);
l=0,r=150;
while( l<=r ){
mij=l+(r-l)/2;
if( merge(mij) ) rez=mij,r=mij-1;
else l=mij+1;
}
merge(rez);
afis(rez);
fclose(stdin); fclose(stdout);
return 0;
}