Pagini recente » Cod sursa (job #799869) | Cod sursa (job #53804) | Cod sursa (job #2837205) | Cod sursa (job #1815006) | Cod sursa (job #2112474)
#include <fstream>
#define DEF 110
#define INF 1 << 29
using namespace std;
ifstream fin ("lapte.in");
ofstream fout ("lapte.out");
int D[DEF][DEF], A[DEF], B[DEF], n, l;
pair < int , int > sol[DEF];
bool calc (int T) {
for (int i = 0; i < DEF; ++ i) {
for (int j = 0; j < DEF; ++ j) {
D[i][j] = - INF;
}
}
D[0][0] = 0;
for (int i = 1; i <= n; ++ i) {
for (int j = 0; j <= l; ++ j) {
for (int k = 0; k <= T / A[i] && k <= j; ++ k) {
int b = (T - k * A[i]) / B[i];
if (D[i][j] < D[i - 1][j - k] + b) {
sol[i].first = k;
sol[i].second = b;
D[i][j] = D[i - 1][j - k] + b;
}
}
}
}
return D[n][l] >= l;
}
int main() {
fin >> n >> l;
for (int i = 1; i <= n; ++ i) {
fin >> A[i] >> B[i];
}
int st = 1, dr = 100, mid;
while (st <= dr) {
mid = (st + dr) / 2;
if (calc (mid)) {
dr = mid - 1;
}
else {
st = mid + 1;
}
}
calc (st);
fout << st << "\n";
for (int i = 1; i <= n; ++ i) {
fout << sol[i].first << " " << sol[i].second << "\n";
}
return 0;
}