Pagini recente » Cod sursa (job #879795) | Cod sursa (job #512235) | Cod sursa (job #1896975) | Cod sursa (job #947956) | Cod sursa (job #1393257)
#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][100005],v[105][2],sol,bst[105][100005],lim,lim2;
int verif(int t)
{
int lim=0,lim2=0;
for(i=1;i<=n;++i)
{
for(j=0;j<=lim2;j++)
{
for(k=j;k<=j + t/v[i][0];k++)
{
if(k>l)
{
if(bst[i][l] < bst[i-1][j] + (t-(k-j)*v[i][0])/v[i][1])
{
bst[i][l] = bst[i-1][j] + (t-(k-j)*v[i][0])/v[i][1];
b[i][l]=j;
}
}
else
if(bst[i][k] < bst[i-1][j] + (t-(k-j)*v[i][0])/v[i][1])
{
bst[i][k] = bst[i-1][j] + (t-(k-j)*v[i][0])/v[i][1];
b[i][k]=j;
}
}
}
lim2+=t/v[i][0];
}
if(bst[n][l]>=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;
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,l);
return 0;
}