Pagini recente » Cod sursa (job #679459) | Cod sursa (job #3138897) | Cod sursa (job #770269) | Cod sursa (job #827277) | Cod sursa (job #1393184)
#include <fstream>
#include <string.h>
#define dim 101
using namespace std;
ifstream fin("lapte.in");
ofstream fout("lapte.out");
int n,l,st,dr,mij,i,j,k,a[dim][dim],b[dim][dim],v[dim][2],sol,bst[dim][dim],lim;
int verif(int t)
{
for(j=0;j<=t;j++)
bst[1][j]=(t-j)/v[1][1],b[1][j]=j;
for(i=2;i<=n;i++)
{
lim = t/v[i][0];
for(j=0;j<=i*t;j++)
{
bst[i][j]=bst[i-1][j] + t/v[i][1];
b[i][j]=j;
for(k=j-1;k>=(j-lim)&&k>=0;k--)
{
if(bst[i][j] < bst[i-1][k] + (t - (j-k)*v[i][0])/v[i][1])
{
bst[i][j] = bst[i-1][k] + (t - (j-k)*v[i][0])/v[i][1];
b[i][j]=k;
}
}
}
}
if(bst[n][l]>=l)
return 1;
return 0;
}
void drum(int i, int j)
{
if(i==1)
{
fout<<j<<' '<<bst[i][j]<<'\n';
return;
}
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;
if(verif(mij))
{
dr=mij-1;
sol=mij;
}
else
st=mij+1;
memset(bst,0,sizeof(bst));
}
fout<<sol<<'\n';
verif(sol);
drum(n,l);
return 0;
}