Cod sursa(job #3285648)

Utilizator Ruxandra009Ruxandra Vasilescu Ruxandra009 Data 13 martie 2025 12:02:50
Problema Lapte Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.52 kb
#include <fstream>

using namespace std;

ifstream f("lapte.in");
ofstream g("lapte.out");

const int inf = 1e9;
struct ceva{
    int timp, lv1, lv2;
}dp[105][50][50];

int n, k;

void path(int ind, int p1, int p2)
{
    if(ind < 1)
        return;

    path(ind - 1, p1 - dp[ind][p1][p2].lv1, p2 - dp[ind][p1][p2].lv2);

    g << dp[ind][p1][p2].lv1 << " " << dp[ind][p1][p2].lv2 << '\n';
}

int main()
{
    f >> n >> k;

    for(int i = 0; i <= n; i ++)
        for(int j = 0; j <= 2 * k; j ++)
            for(int t = 0; t <= 2 * k; t ++)
                dp[i][j][t] = {inf, inf, inf};

    dp[0][0][0] = {0, 0, 0};
    for(int i = 1; i <= n; i ++)
    {
        int x, y; f >> x >> y;
        for(int v1 = 0; v1 <= k; v1 ++)
            for(int v2 = 0; v2 <= k; v2 ++)
                for(int l1 = 0; l1 <= k; l1 ++)
                    for(int l2 = 0; l2 <= k; l2 ++)
                    {
                        if(dp[i - 1][l1][l2].timp == inf)
                            continue;

                        int tmax = max(dp[i - 1][l1][l2].timp, x * v1 + y * v2);
                        if(dp[i][l1 + v1][l2 + v2].timp > tmax)
                            dp[i][l1 + v1][l2 + v2] = {tmax, v1, v2};
                    }
    }

    int p1 = 0, p2 = 0, t = inf;
    for(int i = k; i <= 2 * k; i ++)
        for(int j = k; j <= 2 * k; j ++)
            if(dp[n][i][j].timp < t)
                t = dp[n][i][j].timp, p1 = i, p2 = j;

    g << t << '\n';
    path(n, p1, p2);
    return 0;
}