Pagini recente » Cod sursa (job #815385) | Cod sursa (job #390126) | Cod sursa (job #1960369) | Cod sursa (job #1842239) | Cod sursa (job #2708578)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("lapte.in");
ofstream fout("lapte.out");
struct elem {
int a, b;
};
int n, l, dp[150][150];
elem v[159];
bool rezolva(int t) {
for (int i = 0; i <= l; ++i) {
dp[1][i] = INT_MIN;
if (v[1].a * i > t)
continue;
dp[1][i] = (t - v[1].a * i) / v[1].b;
}
for (int i = 2; i <= n; ++i) {
for (int j = 0; j <= l; ++j) {
dp[i][j] = INT_MIN;
bool ok = false;
for (int k = 0; k <= j; ++k){
if (v[i].a * (j - k) <= t) {
if (dp[i][j] < dp[i - 1][k] + (t - v[i].a * (j - k)) / v[i].b) {
dp[i][j] = dp[i - 1][k] + (t - v[i].a * (j - k)) / v[i].b;
}
}
}
}
}
if (dp[n][l] >= l)
return 1;
return 0;
}
int main()
{
fin >> n >> l;
for (int i = 1; i <= n; ++i) {
fin >> v[i].a >> v[i].b;
}
int st = 1, dr = 150;
while (st <= dr) {
int mid = (st + dr) / 2;
if (rezolva(mid)) {
dr = mid - 1;
}
else st = mid + 1;
}
fout << st;
return 0;
}