Cod sursa(job #3190890)

Utilizator Robert_MitriRobert Mitri Robert_Mitri Data 8 ianuarie 2024 11:22:38
Problema Lapte Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <fstream>
#include <cstring>
#define INF 0x3FFFFFFF
using namespace std;
ifstream fin("lapte.in");
ofstream fout("lapte.out");

int n,l;

struct om
{
    int a;
    int b;
} v[105];


///   a    b
int d[155][155];

pair<int,int> t[105][105];




bool ok(int val)
{
    for(int i = 1;i<=n+1;i++)
        for(int j=0;j<=l;j++)
            d[i][j]=-INF;

    d[1][0]=0;

    for(int i = 1;i<=n;i++)
        for(int a = 0;a<=l;a++)
            for(int x =0;x<=val/v[i].a;x++)
            {
                int br = min((val- x* v[i].a)/v[i].b,l-d[i][a]);
                d[i+1][a+x] = max(d[i+1][a+x],d[i][a] + br);
            }

    return d[n+1][l]>=l;
}

int b_s()
{
    int st = 1;
    int dr = 100;
    int p = -1;
    while(st<=dr)
    {
        int mid = (st+dr)/2;
        if(ok(mid))
            dr=mid-1,p=mid;
        else
            st=mid+1;
    }
}
void rec(int x,int y)
{
    if(x!=0 || y!=0)
    {
        int tx = t[x][y].first;
        int ty = t[x][y].second;
        rec(tx,ty);
        fout<<x-tx<<' '<<y-ty<<'\n';
    }
}


int main()
{
    fin>>n>>l;
    for(int i=1; i<=n; i++)
        fin>>v[i].a>>v[i].b;
    int rez = b_s();
    fout<<rez<<'\n';

}