Pagini recente » Cod sursa (job #1814392) | Cod sursa (job #2702527) | Cod sursa (job #2026172) | Cod sursa (job #957279) | Cod sursa (job #1308477)
#include <fstream>
#include <cstring>
#define DIM 105
#define INF 0x3f3f3f3f
using namespace std;
ifstream fin("lapte.in");
ofstream fout("lapte.out");
int n,a[DIM],b[DIM],D[DIM][DIM],t[DIM][DIM],l,sol_min;
void drum(int n,int l){
if(n==0)
return;
drum(n-1,l-t[n][l]);
fout<<t[n][l]<<" "<<(sol_min-a[n]*t[n][l])/b[n]<<"\n";
}
int ok(int x){
for(int i=0;i<=n;i++){
for(int j=0;j<=l;j++)
D[i][j]=-INF;
D[i][0]=0;
}
for(int i=1;i<=n;i++){
int timpa=x/a[i];
for(int nra=0;nra<=timpa;nra++){
int nrb=(x-nra*a[i])/b[i];
for(int j=l;j>=nra;j--){
if(D[i][j] < D[i-1][j-nra] + nrb){
D[i][j] = D[i-1][j-nra] + nrb;
t[i][j]=nra;
}
}
}
}
return D[n][l] >= l;
}
int main(){
fin>>n>>l;
for(int i=1;i<=n;i++)
fin>>a[i]>>b[i];
int m,p=0,u=DIM;
while(p<=u){
m=(p+u)/2;
if(ok(m)){
sol_min=m;
u=m-1;
}
else
p=m+1;
}
fout<<sol_min<<"\n";
ok(sol_min);
drum(n,l);
fin.close();fout.close();
return 0;
}