Pagini recente » Cod sursa (job #1843066) | Cod sursa (job #560824) | Cod sursa (job #759375) | Cod sursa (job #1045888) | Cod sursa (job #1393200)
#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,lim2,poz;
int verif(int t)
{
int 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<=j&&k<=lim2;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;
}
}
}
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==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;
poz=l;
if(verif(mij))
{
dr=mij-1;
sol=mij;
}
else
st=mij+1;
memset(bst,0,sizeof(bst));
}
fout<<sol<<'\n';
verif(sol);
drum(n,poz);
return 0;
}