Cod sursa(job #2708578)

Utilizator MihneaCadar101Cadar Mihnea MihneaCadar101 Data 19 februarie 2021 00:56:29
Problema Lapte Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.24 kb
#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;
}