Pagini recente » Cod sursa (job #2928202) | Cod sursa (job #599523) | Cod sursa (job #2744686) | Cod sursa (job #2751973) | Cod sursa (job #1992916)
#include<fstream>
using namespace std;
ifstream in("lapte.in");
ofstream out("lapte.out");
int n,p,a[101],b[101],st,dr,mid,d[101][101],k,l,j,i,ra[101],rb[101];
int main(){
in >> n >> l;
for( i = 1; i <= n; i ++ ){
in >> a[i] >> b[i];
}
for( st = 1, dr = 100000; st <= dr; ){
mid = (st +dr )/2;
for( i = 0; i <= n; i ++ ){
for( j = 0; j <= l; j ++ ){
d[i][j] = -1e8;
}
}
d[0][0] = 0;
for( i = 1; i <= n; i ++ ){
for( j = 0; j <= l; j ++ ){
for( k = 0; k <= min( j , mid / a[i] ); k ++ ){
d[i][j] = max( d[i][j], d[i-1][j-k] + (mid -a[i]*k)/b[i] );
}
}
}
if( d[n][l] < l ){
st = mid + 1;
}
else{
dr = mid - 1;
}
}
out<<st<<"\n";
for( i = 0; i <= n; i ++ ){
for( j = 0; j <= l; j ++ ){
d[i][j] = -1e8;
}
}
d[0][0] = 0;
for( i = 1; i <= n; i ++ ){
for( j = 0; j <= l; j ++ ){
for( k = 0; k <= min( j , st / a[i] ); k ++ ){
d[i][j] = max( d[i][j], d[i-1][j-k] + (st -a[i]*k)/b[i] );
}
}
}
j = l;
for( i = n; i >= 1; i -- ){
for( k = 0; k <= min( j, st/a[i] ); k ++ ){
if(d[i-1][j - k] + (st - a[i]*k)/b[i] == d[i][j] ){
ra[i] = k;
rb[i] = (st - a[i]*k)/b[i];
j = j - k;
break;
}
}
}
for( i = 1; i <= n; i ++ ){
out << ra[i] <<" "<< rb[i]<<"\n";
}
return 0;
}