Cod sursa(job #2332887)

Utilizator Anakin1001George Giorgiu Gica Anakin1001 Data 31 ianuarie 2019 13:04:55
Problema Lapte Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("lapte.in");
ofstream g("lapte.out");
int i,j,x,mid,st,dr,n,L,d[105][105],t[105][105],sol,y,k;
struct meme{
    int a,b;
}v[103],b[103];
int dinamica(int X){
    int i,j,k;
    memset(t,0,sizeof(t));
    for(i=1;i<=n;i++)
        for(j=0;j<=L;j++)
            d[i][j]=-1;
    for(j=0;j<=L;j++)
     if(j*v[1].a<=X)
        d[1][j]=(X-j*v[1].a)/v[1].b;
    for(i=2;i<=n;i++){
        for(j=0;j<=L;j++)
            for(k=0;k<=j;k++)
              if(d[i-1][k]!=-1&&(j-k)*v[i].a<=X)
                if(d[i][j]<d[i-1][k]+(X-(j-k)*v[i].a)/v[i].b){
                    d[i][j]=d[i-1][k]+(X-(j-k)*v[i].a)/v[i].b;
                    t[i][j]=k;
                }
    }
    return d[n][L];
}
int main()
{   f>>n>>L;
    for(i=1;i<=n;i++)
        f>>v[i].a>>v[i].b;
    st=1;dr=101;
    while(st<=dr){
        mid=(st+dr)/2;
        x=dinamica(mid);
        if(x>=L){
            dr=mid-1;
            sol=mid;
        }
        else
            st=mid+1;
    }
    g<<sol<<'\n';
    int x=dinamica(sol);
    y=L;
    for(i=n;i>=1;i--){
        b[i].a=y-t[i][y];
        b[i].b=d[i][y]-d[i-1][t[i][y]];
        y=t[i][y];
    }
    for(i=1;i<=n;i++)
        g<<b[i].a<<' '<<b[i].b<<'\n';
    return 0;
}