Pagini recente » Cod sursa (job #560069) | Cod sursa (job #1531567) | Cod sursa (job #1511284) | Autentificare | Cod sursa (job #184069)
Cod sursa(job #184069)
#include<fstream>
using namespace std;
fstream fin,fout;
int i,j,N,L,tmin,T, a[101], b[101], x[102][552], y[102][552], w;
int e_posibil(int t)
{
int i,j,k,v;
for (i=1;i<=N;i++)
for (j=0;j<=550;j++)
{x[i][j]=-1;y[i][j]=-1;}
for (j=0;j*a[N]<=t;j++)
{x[N][j]=(t-j*a[N])/b[N];y[N][j]=j;}
for (i=N-1;i>=1;i--)
for (j=0;j<=550;j++)
if (x[i+1][j]>-1)
{
for (k=0;(k*a[i]<=t)&&(k+j<=550);k++)
{
v=(t-k*a[i])/b[i];
if (v+x[i+1][j]>x[i][j+k])
{x[i][j+k]=v+x[i+1][j]; y[i][j+k]=k;}
}
if (x[i][L]>=L)return 1;
}
for (i=L;i<=550;i++)
if (x[1][i]>=L)return 1;
return 0;
}
void caut_binar_timpul_minim(int tl, int th, int &tp)
{
if (tl<=th)
{
int tm=(tl+th)/2;
if (e_posibil(tm)==1)
{
tp=tm;
caut_binar_timpul_minim(tl,tm-1,tp);
}
else
{
caut_binar_timpul_minim(tm+1,th,tp);
}
}
}
int main(void)
{
fin.open("lapte.in",ios::in);
fout.open("lapte.out",ios::out);
fin>>N>>L;
for (i=1;i<=N;i++)
fin>>a[i]>>b[i];
tmin=L*a[N];
T=tmin;
caut_binar_timpul_minim(1,tmin,T);
w=e_posibil(T);
fout<<T<<endl;
j=L;
for (i=1;i<=N;i++)
{
fout<<y[i][j]<<" "<<(T-y[i][j]*a[i])/b[i]<<endl;
j=j-y[i][j];
}
fout.close();
fin.close();
return 0;
}