Cod sursa(job #2541654)

Utilizator ivddabDabelea Ioana-Viviana ivddab Data 8 februarie 2020 17:59:15
Problema Lapte Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <fstream>
#include <algorithm>
#include <vector>
#define NM 105
#define oo 2e9
using namespace std;
ifstream f("lapte.in");
ofstream g("lapte.out");
int n,l,st,dr,mijl,i,rasp;
int  a[NM],b[NM];
int d[NM][NM],bk[NM][NM];
vector < pair < int,int > > r;
int verif(int t){
  int i,j,k;
  for(i=0;i<=n;i++)
   for(j=0;j<=l;j++)
    d[i][j]=-oo;
  d[0][0]=0;
  for(i=1;i<=n;i++)
    for(j=0;j<=l;j++)
     for(k=0;k<=j&&k*a[i]<=t;k++){
        int x;
        x=(t-k*a[i])/b[i];
        if(d[i][j]<d[i-1][j-k]+x){
            bk[i][j]=j-k;
            d[i][j]=d[i-1][j-k]+x;
        }
     }
  return (d[n][l]>=l);
}
int main()
{
    f>>n>>l;
    for(i=1;i<=n;i++)
      f>>a[i]>>b[i];

    st=1; dr=105;
    while(st<=dr){
        mijl=(st+dr)/2;
        if(verif(mijl)==1){
            rasp=mijl;
            dr=mijl-1;
        } else st=mijl+1;
    }

    verif(rasp);
    while(n!=0){
        r.push_back({l-bk[n][l],d[n][l]-d[n-1][bk[n][l]]});
        n--; l=bk[n][l];
    }
    g<<rasp<<'\n';
    for(i=r.size()-1;i>=0;i--) g<<r[i].first<<' '<<r[i].second<<'\n';
    return 0;
}