Pagini recente » Cod sursa (job #1604973) | Cod sursa (job #649431) | Cod sursa (job #2340938) | Cod sursa (job #1511619) | Cod sursa (job #1329080)
#include <fstream>
#define nmax 105
#define inf 0x3f3f3f3f
using namespace std;
ifstream f("lapte.in");
ofstream g("lapte.out");
int n,d[nmax][nmax];
int a[nmax],b[nmax],l,solmin,t[nmax][nmax];
void drum(int n,int l){
if(n==0)
return;
drum(n-1,l-t[n][l]);
g<<t[n][l]<<" "<<(solmin-a[n]*t[n][l])/b[n]<<"\n";
}
int ok(int x){
int i,j,timp,nra,nrb;
for(i=0;i<=n;i++){
for(j=0;j<=l;j++)
d[i][j]=-inf;
d[i][0]=0;
}
for(i=1;i<=n;i++){
timp=x/a[i];
for(nra=0;nra<=timp;nra++){
nrb=(x-nra*a[i])/b[i];
for(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(){
int i;
f>>n>>l;
for(int i=1;i<=n;i++)
f>>a[i]>>b[i];
int p=1,u=nmax;
while(p<=u){
int m=(p+u)/2;
if(ok(m)){
solmin=m;
u=m-1;
}
else
p=m+1;
}
g<<solmin<<"\n";
ok(solmin);
drum(n,l);
return 0;
}