Cod sursa(job #2011647)

Utilizator NToniBoSSNicolae Tonitza NToniBoSS Data 16 august 2017 20:25:21
Problema Lapte Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <stdio.h>
#include <stdlib.h>
#define INF 1000000
int a[101][101],x[101],y[101],leg[101][101],la[101],lb[101],l;
int verif(int t,int n)
{
    int i,j,max,p,k;
    for(i=1; i<=n; i++)
        for(j=0; j<=l; j++)
            a[i][j]=leg[i][j]=0;
    for(i=1; i<=l; i++)
        a[0][i]=-INF;
    for(i=1; i<=n; i++)
        for(j=0; j<=l; j++)
        {
            a[i][j]=a[i-1][j]+t/y[i];
            leg[i][j]=0;
            for(k=j-1; k>=0; k--)
                if((t-x[i]*(j-k))/y[i]+a[i-1][k]>a[i][j] && (t-x[i]*(j-k))>=0)
                    a[i][j]=(t-x[i]*(j-k))/y[i]+a[i-1][k],leg[i][j]=j-k;
        }
    if(a[n][l]>=l) return 1;
    return 0;
}
int main()
{
    int n,i,j,pas,ct,k;
    freopen("lapte.in","r",stdin);
    freopen("lapte.out","w",stdout);
    scanf("%d%d",&n,&l);
    for(i=1; i<=n; i++)
        scanf("%d%d",&x[i],&y[i]);
    j=0;
    pas=1<<7;
    while(pas)
    {
        if(verif(j+pas,n)) ;
        else j+=pas;
        pas/=2;
    }
    j++;
    ct=verif(j,n);
    printf("%d\n",j);
    k=l;
    for(i=n; i>0; i--)
    {
        la[i]=leg[i][k];
        k-=leg[i][k];
    }
    for(i=1; i<=n; i++)
        printf("%d %d\n",la[i],(j-la[i]*x[i])/y[i]);

    return 0;
}