Pagini recente » Cod sursa (job #1383595) | Cod sursa (job #1231684) | Cod sursa (job #1133882) | Cod sursa (job #2242456) | Cod sursa (job #2113754)
#include<fstream>
using namespace std;
ifstream fin("lapte.in");
ofstream fout("lapte.out");
int n,i,j,l,st,dr,mid,b1;
int a[101],b[101];
int d[101][101];
pair<int,int>sol[101];
int f(int mid){
for(int i=0;i<101;i++){
for(int j=0;j<101;j++){
d[i][j]=-1000;
}
}
d[0][0]=0;
for(int i=1;i<=n;i++){
for(int j=0;j<=l;j++){
for(int k=0;k<=mid/a[i]&&k<=j;k++){
int b1=(mid-k*a[i])/b[i];
d[i][j]=max(d[i][j],d[i-1][j-k]+b1);
}
}
}
if(d[n][l]>=l){
return 1;
}
return 0;
}
int main(){
fin>>n>>l;
for(i=1;i<=n;i++){
fin>>a[i]>>b[i];
}
st=1;
dr=101;
while(st<=dr){
mid=(st+dr)/2;
if(f(mid)==1){
dr=mid-1;
}
else{
st=mid+1;
}
}
fout<<st<<"\n";
f(st);
for(i=n;i>=1;i--){
for(j=0;j<=st/a[i];j++){
b1=(st-j*a[i])/b[i];
if(d[i][l]==d[i-1][l-j]+b1){
sol[i].first=j;
sol[i].second=b1;
l-=j;
break;
}
}
}
for(i=1;i<=n;i++){
fout<<sol[i].first<<" "<<sol[i].second<<"\n";
}
return 0;
}