Pagini recente » Cod sursa (job #2525430) | Cod sursa (job #1390794) | Cod sursa (job #2832639) | Cod sursa (job #1895161) | Cod sursa (job #1358785)
#include <fstream>
using namespace std;
ifstream fin("lapte.in");
ofstream fout("lapte.out");
int n,l,i,A[105],B[105],D[105][105],T[105][105],sol,st,dr,mid;
void drum(int n, int l){
if(n==0){
return;
}
else{
drum(n-1,l-T[n][l]);
fout<<T[n][l]<<" "<<(sol-A[n]*T[n][l])/B[n]<<"\n";
}
}
//D[i][j] = nr max de litri de lapte B daca bem i litri A cu j persoane;
int verif(int x){
for(int i=0; i<=n;i++){
for(int j=0;j<=l;j++){
D[i][j]=-1000000;
}
D[i][0]=0;
}
for(i=1;i<=n;i++){
int litA=x/A[i];
for(int a = 1; a<=litA;a++){
int b = (x-a*A[i])/B[i];
for(int j=l;j>=a;j--){
if(D[i][j]<D[i-1][j-a]+b){
D[i][j]=D[i-1][j-a]+b;
T[i][j]=a;
}
}
}
}
if(D[n][l]>=l){
return 1;
}
else{
return 0;
}
}
int main(){
fin>>n>>l;
for(i=1;i<=n;i++){
fin>>A[i]>>B[i];
}
st=1;dr=105;
while(st<=dr){
mid=(st+dr)/2;
if(verif(mid)){
sol=mid;
dr=mid-1;
}
else{
st=mid+1;
}
}
fout<<sol<<"\n";
verif(sol);
drum(n,l);
return 0;
}