Cod sursa(job #1961186)

Utilizator Daria09Florea Daria Daria09 Data 10 aprilie 2017 22:28:56
Problema Lapte Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <iostream>
#include <fstream>
#define DIM 101
using namespace std;
ifstream f("lapte.in");
ofstream g("lapte.out");
int la[DIM],lb[DIM],s[DIM][DIM],n,l,r[DIM][DIM],ans;
bool verif(int x)
{
    for(int i=0;i<=n;++i)
    for(int j=0;j<=l;++j)
    { s[i][j]=-(DIM*DIM); r[i][j]=0;}
    s[0][0]=0;
    for(int i=1;i<=n;++i)
        for(int j=0;j<=l&&j*la[i]<=x;++j)
            for(int k=0;k+j<=l;++k)
    {
        int y=s[i-1][k]+(x-j*la[i])/lb[i];
        if(s[i][k+j]<y)s[i][k+j]=y,r[i][k+j]=j;
    }
    if(l<=s[n][l])return true; return false;
}
void write(int n1,int k1)
{
    g<<r[n1][k1]<<" "<<(ans-r[n1][k1]*la[n1])/lb[n1]<<'\n';
    if(n1!=1)write(n1-1,k1-r[n1][k1]);
}
void solve()
{
    f>>n>>l;
    for(int i=n;i>=1;i--)f>>la[i]>>lb[i];
    int i,j,m;
    i=1; j=20001;
    while(i<=j)
    {
        m=(i+j)/2;
        if(verif(m)==true)
            j=m-1;
        else
            i=m+1;
    }
    ans=i;
    g<<i<<'\n';
    verif(ans);
    write(n,l);
}
int main()
{
    solve();
    return 0;
}