Pagini recente » Cod sursa (job #588593) | Cod sursa (job #439669) | Cod sursa (job #1642427) | Cod sursa (job #3165015) | Cod sursa (job #604390)
Cod sursa(job #604390)
#include <cstdio>
FILE *f,*g;
int n,l,i,mn=99999999;
int mx[110][110],ax[110][110];
struct cp{int a,b;} ;
cp v[110];
int ok(int t) ;
void caut(int i, int j) {
int m;
if (i<=j) {
m=(i+j)/2;
if (ok(m)) {
if (mn>m) {
mn=m;
}
caut(i,m-1);
}
else {
caut(m+1,j);
}
}
}
int ok(int t) {
int i,j,q;
for (i=0;i<=n;i++)
for (j=0;j<=l;j++)
mx[i][j]=-1;
mx[0][0]=0;
for (i=1;i<=n;i++)
for(j=0;j<=l;j++)
for (q=0;q<=t/v[i].a && q<=j;q++)
if (mx[i-1][j-q]!=-1 && mx[i-1][j-q]+(t-q*v[i].a)/v[i].b > mx[i][j]) {
mx[i][j] = mx[i-1][j-q]+(t-q*v[i].a)/v[i].b;
ax[i][j] = j-q;
}
if (mx[n][l]>=l)
return 1;
else
return 0;
}
void rec(int i,int j) {
if (i>1)
rec(i-1,ax[i][j]);
fprintf(g,"%d %d\n",j-ax[i][j],mx[i][j]-mx[i-1][ax[i][j]]);
}
int main() {
f=fopen("lapte.in","r");
g=fopen("lapte.out","w");
fscanf(f,"%d%d",&n,&l);
for (i=1;i<=n;i++) {
fscanf(f,"%d%d",&v[i].a,&v[i].b);
}
caut(1,100);
i=ok(mn);
rec(n,l);
fclose(g);
return 0;
}