Cod sursa(job #1920782)

Utilizator RaduMirceaAndreiRadu Mircea Andrei RaduMirceaAndrei Data 10 martie 2017 10:01:21
Problema Lapte Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
# include <fstream>
# define INF 1000000000
using namespace std;
ifstream fin("lapte.in");
ofstream fout("lapte.out");
int d[110][110],tata[110][110],ca[110],cb[110];
int sol[2][110],n,l,i,j,step,q;
bool verif(int t){
    for(int i=0;i<=n;i++)
        for(int j=0;j<=l;j++)
            d[i][j]=-2*INF;
    d[0][0]=0;
    for(int i=1;i<=n;i++)
        for(int la=0;la<=t/ca[i];la++)
            for(int j=0;j<=l-la;j++){
                int lb=(t-ca[i]*la)/cb[i];
                if(d[i][j+la]<d[i-1][j]+lb){
                    d[i][j+la]=d[i-1][j]+lb;
                    tata[i][j+la]=la;
                }
            }
    return d[n][l]>=l;
}
int main () {
    fin>>n>>l;
    for(i=1;i<=n;i++)
        fin>>ca[i]>>cb[i];
    for(step=1;step<=100;step*=2);
    for(j=0;step;step/=2)
        if(!verif(j+step))
            j+=step;
    fout<<j+1<<"\n";
    verif(j+1);
    i=n;
    j=l;
    while(i>=0&&j>=0){
        q=tata[i][j];
        sol[0][i]=q;
        sol[1][i]=d[i][j]-d[i-1][j-q];
        i--;
        j-=q;
    }
    for(i=1;i<=n;i++)
        fout<<sol[0][i]<<" "<<sol[1][i]<<"\n";
    return 0;
}