Cod sursa(job #1267259)

Utilizator sebinechitasebi nechita sebinechita Data 19 noiembrie 2014 18:18:04
Problema Lapte Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.43 kb
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("lapte.in");
ofstream fout("lapte.out");
#define MAX 102

int c[MAX][MAX], n, l, a[MAX], b[MAX], p[MAX][MAX];

void af(int a[MAX][MAX])
{
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=l;j++)
        {
            cout << a[i][j] << " ";
        }
        cout << "\n";
    }
    cout << "\n";
}

bool rez(int t)
{
    int i, j, k;
    memset(c, -1, sizeof(c));
    for(i=0;i<=n;i++)
    {
        c[i][0]=0;
    }
    for(i=0;i<n;i++)
    {

        for(j=0;j<=l;j++)
        {
            for(k=0;k<=t;k++)
            {
                if(c[i][j]!=-1)
                    if(c[i+1][j+k]<c[i][j]+(t-a[i+1]*k)/b[i+1])
                    {
                        c[i+1][j+k]=c[i][j]+(t-a[i+1]*k)/b[i+1];
                        p[i+1][j+k] = j;
                    }
            }
        }
    }
    if(c[n][l]>=l)
        return 1;
    return 0;

}

int main()
{
    int i, st, dr, k;
    fin>>n>>l;
    for(i=1;i<=n;i++)
    {
        fin>>a[i]>>b[i];
    }
    st=1;
    dr=100;
    while(st<dr)
    {
        int t=(st+dr)>>1;
        k=rez(t);
        if(k)
            dr=t;
        else
            st=t+1;
    }

    fout << st << "\n";
    int r=l;
    for(i=n;i>=1;i--)
    {
        fout << (st-(r-p[i][r])*a[i])/b[i] << " " << r-p[i][r] << "\n";
        r=p[i][r];
    }
}