Pagini recente » Cod sursa (job #865413) | Cod sursa (job #2127720) | Cod sursa (job #1778173) | Cod sursa (job #1944507) | Cod sursa (job #1393268)
#include <fstream>
#include <string.h>
#define dim 110
using namespace std;
ifstream fin("lapte.in");
ofstream fout("lapte.out");
int n,l,st,dr,mij,i,j,k,b[105][11111],v[105][2],sol,bst[105][11111],lim,lim2,poz;
int verif(int t)
{
int i,j,k,x=0,Max=0,s=0,lim=0,lim2=0;
for (i=1;i<=n;++i)
{
lim+=t/v[i][0];
for (j=0;j<=lim;++j)
{
for (k=max(0,j+lim2-lim);k<=lim2 && k<=j;++k)
{
x=bst[i-1][k]+(t-(j-k)*v[i][0])/v[i][1];
if (bst[i][j]<=x)
bst[i][j]=x, b[i][j]=k;
}
}
lim2=lim;
}
for (i=l;i<=lim;++i)
if (bst[n][poz]<=bst[n][i])
poz=i;
if(bst[n][poz]>=l)
return 1;
return 0;
}
void drum(int i, int j)
{
if(i>0)
{
int k=b[i][j];
drum(i-1,k);
fout<<j-k<<' '<<bst[i][j]-bst[i-1][k]<<'\n';
}
}
int main()
{
fin>>n>>l;
for(i=1;i<=n;i++)
fin>>v[i][0]>>v[i][1];
st=1;dr=100;
while(st<=dr)
{
mij=(st+dr)/2;
poz=l;
if(verif(mij))
{
dr=mij-1;
sol=mij;
}
else
st=mij+1;
memset(bst,0,sizeof(bst));
}
fout<<sol<<'\n';
int d;
d=verif(sol);
drum(n,poz);
return 0;
}