Cod sursa(job #2397620)

Utilizator SchnitzelMannPavaloiu Gabriel SchnitzelMann Data 4 aprilie 2019 17:09:58
Problema Lapte Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("lapte.in");
ofstream out("lapte.out");
int dp[102][102],pr[102][102],aa[102][102],l,n,a[102],b[102],timp;
bool ok(int t)
{
    int i,j,k,s=0;
    for(i=1;i<=n;i++)
    {
        for(j=0;j<=l;j++)
        {
            dp[i][j]=0;
            for(k=min(j,t/a[i]);k>=0&&j-k<=s;k--)
                if(dp[i][j]<dp[i-1][j-k]+(t-a[i]*k)/b[i])
                {
                    dp[i][j]=dp[i-1][j-k]+(t-a[i]*k)/b[i];
                    aa[i][j]=k;
                }
        }
        s+=t/a[i];
    }
    return dp[n][l]>=l;
}
void bk(int x,int y)
{
    if(x>1)
        bk(x-1,y-aa[x][y]);
    out<<aa[x][y]<<" "<<(timp-aa[x][y])/b[x]<<"\n";
}
int main()
{
    int i,r=0,pas=1<<15;
    in>>n>>l;
    for(i=1;i<=n;i++)
        in>>a[i]>>b[i];
    for(;pas;pas>>=1)
        if(!ok(r+pas))
            r+=pas;
    timp=r+1;
    out<<timp<<"\n";
    bk(n,l);
    return 0;
}