Pagini recente » Cod sursa (job #918134) | Cod sursa (job #1864258) | Cod sursa (job #2648116) | Cod sursa (job #1899605) | Cod sursa (job #1820960)
#include <fstream>
using namespace std;
ifstream fin ("lapte.in");
ofstream fout ("lapte.out");
int n, l, i, j, k, p, q, a[110], b[110], d[110], c[110][110], v[110][110], P[110][110], maxim, s, t, nr, x;
int main() {
fin >> n >> l;
for (i = 1; i <= n; ++i) {
fin >> a[i] >> b[i];
}
q = 101;
while (p + 1 < q) {
t = (p + q) / 2;
for (i = 0; i < 101; ++i) {
for (j = 0; j < 101; ++j) {
c[i][j] = 0;
v[i][j] = 0;
P[i][j] = 0;
}
}
for (j = 0; j <= t / a[1]; ++j) {
c[1][j] = (t - a[1] * j) / b[1];
v[1][j] = j;
P[1][j] = 1;
}
for (i = 2; i <= n; ++i) {
for (j = 0; j <= l; ++j) {
maxim = -1;
nr = 0;
for (k = 0; k <= j; ++k) {
if (a[i] * k <= t) {
x = (t - a[i] * k) / b[i];
if (c[i - 1][j - k] + x> maxim && P[i - 1][j - k] == 1) {
maxim = c[i - 1][j - k] + x;
nr = k;
}
} else {
break;
}
}
c[i][j] = maxim;
v[i][j] = nr;
if (maxim == -1) {
P[i][j] = 0;
} else {
P[i][j] = 1;
}
}
}
if (c[n][l] >= l) {
s = t;
k = l;
for (i = n; i > 0; --i) {
d[i] = v[i][k];
k -= v[i][k];
}
q = t;
} else {
p = t;
}
}
fout << s << "\n";
for (i = 1; i <= n; ++i) {
fout << d[i] << ' ';
k = (s - d[i] * a[i]) / b[i];
fout << k << "\n";
}
return 0;
}