Pagini recente » Cod sursa (job #1163889) | Cod sursa (job #978531) | Cod sursa (job #481660) | Cod sursa (job #2573767) | Cod sursa (job #2332841)
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("lapte.in");
ofstream fout("lapte.out");
struct viteza
{
int a,b;
}v[101];
struct rezultat
{
int a,b;
}rez[101];
int st,dr,n,l,sol;
int d[101][101],tata[101][101];
int dinamica(int t)
{
memset(d,0,sizeof(d));
memset(tata,0,sizeof(tata));
for(int i=0;i<=l&&t-i*v[1].a>0;i++)
d[1][i]=(t-i*v[1].a)/v[1].b;
for(int i=2;i<=n;i++)
{
for(int j=0;j<=l;j++)
{
for(int k=0;k<=j;k++)
{
if((j-k)*v[i].a<=t)
if(d[i][j]<d[i-1][k]+(t-(j-k)*v[i].a)/v[i].b)
{
d[i][j]=d[i-1][k]+(t-(j-k)*v[i].a)/v[i].b;
tata[i][j]=k;
}
}
}
}
return d[n][l];
}
int main()
{
fin>>n>>l;
for(int i=1;i<=n;i++)
fin>>v[i].a>>v[i].b;
st=1;dr=100;
while(st<=dr)
{
int mij=(st+dr)/2;
int b=dinamica(mij);
if(b>=l)
{
dr=mij-1;
sol=mij;
}
else
st=mij+1;
}
fout<<sol<<'\n';
dinamica(sol);int x=l;
for(int i=n;i>=1;i--)
{
rez[i].a=l-tata[i][l];
rez[i].b=d[i][l]-d[i-1][tata[i][l]];
x=tata[i][l];
}
for(int i=1;i<=n;i++)
fout<<rez[i].a<<' '<<rez[i].b<<'\n';
return 0;
}