Pagini recente » Cod sursa (job #406167) | Cod sursa (job #3231278) | Cod sursa (job #2070774) | Istoria paginii utilizator/diana-maria | Cod sursa (job #1368257)
#include <stdio.h>
#define INF 2000000000
#define MAXN 100
int n, q, d[MAXN+1][MAXN+1], p[MAXN+1][MAXN+1], a[MAXN+1], b[MAXN+1], ans[MAXN+1];
FILE *fout;
inline void go(int t){
int i, j, k;
for(i=1; i<=q; i++){
d[0][i]=-INF;
}
for(i=1; i<=n; i++){
for(j=0; j<=q; j++){
d[i][j]=d[i-1][j]+t/b[i];
p[i][j]=0;
for(k=1; (k<=j)&&(k*a[i]<=t); k++){
if(d[i][j]<d[i-1][j-k]+(t-k*a[i])/b[i]){
d[i][j]=d[i-1][j-k]+(t-k*a[i])/b[i];
p[i][j]=k;
}
}
}
}
}
inline void afisare(int t){
int g=q, i;
for(i=n; i>0; i--){
ans[i]=p[i][g];
g-=p[i][g];
}
for(i=1; i<=n; i++){
fprintf(fout, "%d %d\n", ans[i], (t-ans[i]*a[i])/b[i]);
}
}
int main(){
int rez, pas, i;
FILE *fin;
fin=fopen("lapte.in", "r");
fout=fopen("lapte.out", "w");
fscanf(fin, "%d%d", &n, &q);
for(i=1; i<=n; i++){
fscanf(fin, "%d%d", &a[i], &b[i]);
}
rez=-1;
for(pas=1<<6; pas!=0; pas>>=1){
go(rez+pas);
if(d[n][q]<q){
rez+=pas;
}
}
rez++;
fprintf(fout, "%d\n", rez);
go(rez);
afisare(rez);
fclose(fin);
fclose(fout);
return 0;
}