Pagini recente » Cod sursa (job #2504679) | Cod sursa (job #865450) | Cod sursa (job #1853030) | Cod sursa (job #1420346) | Cod sursa (job #1920782)
# include <fstream>
# define INF 1000000000
using namespace std;
ifstream fin("lapte.in");
ofstream fout("lapte.out");
int d[110][110],tata[110][110],ca[110],cb[110];
int sol[2][110],n,l,i,j,step,q;
bool verif(int t){
for(int i=0;i<=n;i++)
for(int j=0;j<=l;j++)
d[i][j]=-2*INF;
d[0][0]=0;
for(int i=1;i<=n;i++)
for(int la=0;la<=t/ca[i];la++)
for(int j=0;j<=l-la;j++){
int lb=(t-ca[i]*la)/cb[i];
if(d[i][j+la]<d[i-1][j]+lb){
d[i][j+la]=d[i-1][j]+lb;
tata[i][j+la]=la;
}
}
return d[n][l]>=l;
}
int main () {
fin>>n>>l;
for(i=1;i<=n;i++)
fin>>ca[i]>>cb[i];
for(step=1;step<=100;step*=2);
for(j=0;step;step/=2)
if(!verif(j+step))
j+=step;
fout<<j+1<<"\n";
verif(j+1);
i=n;
j=l;
while(i>=0&&j>=0){
q=tata[i][j];
sol[0][i]=q;
sol[1][i]=d[i][j]-d[i-1][j-q];
i--;
j-=q;
}
for(i=1;i<=n;i++)
fout<<sol[0][i]<<" "<<sol[1][i]<<"\n";
return 0;
}