Pagini recente » Cod sursa (job #614123) | Cod sursa (job #920386) | Cod sursa (job #2571481) | Cod sursa (job #2140601) | Cod sursa (job #2374681)
#include <fstream>
using namespace std;
ifstream fin("lapte.in");
ofstream fout("lapte.out");
int n,l,i,j,k,v[101][101],t,st,dr;
int a[101],b[101];
int d[101][101];
void afis(int n,int l){
if(n>0){
afis(n-1,l-d[n][l]);
fout<<d[n][l]<<" "<<(st-d[n][l]*a[n])/b[n]<<"\n";
}
}
int main(){
fin>>n>>l;
for(i=1;i<=n;i++){
fin>>a[i]>>b[i];
}
st=1; dr=100;
while(st<=dr){
t=(st+dr)/2;
for(i=1;i<=n;i++)
for(j=0;j<=l;j++)
v[i][j]=-1;
for(j=0;j<=min(t/a[1],l);j++){
v[1][j]=(t-j*a[1])/b[1];
d[1][j]=j;
}
for(i=2;i<=n;i++){
for(j=0;j<=min(t/a[i],l);j++){
for(k=0;k+j<=l;k++){
if(v[i-1][k]!=-1){
if(v[i][j+k]==-1 || v[i][j+k]<v[i-1][k]+(t-j*a[i])/b[i]){
v[i][j+k]=v[i-1][k]+(t-j*a[i])/b[i];
d[i][j+k]=j;
}
}
}
}
}
if(v[n][l]>=l)
dr=t-1;
else
st=t+1;
}
for(i=1;i<=n;i++)
for(j=0;j<=l;j++)
v[i][j]=-1;
for(j=0;j<=min(st/a[1],l);j++){
v[1][j]=(st-j*a[1])/b[1];
d[1][j]=j;
}
for(i=2;i<=n;i++){
for(j=0;j<=min(st/a[i],l);j++){
for(k=0;k+j<=l;k++){
if(v[i-1][k]!=-1){
if(v[i][j+k]==-1 || v[i][j+k]<v[i-1][k]+(st-j*a[i])/b[i]){
v[i][j+k]=v[i-1][k]+(st-j*a[i])/b[i];
d[i][j+k]=j;
}
}
}
}
}
fout<<st<<"\n";
afis(n,l);
return 0;
}