Pagini recente » Diferente pentru runda/pre_oni_gim2015 intre reviziile 27 si 15 | Atasamentele paginii Clasament newcomers_2 | template/detailed-feedback | Istoria paginii template/onis-2014/footer | Cod sursa (job #483208)
Cod sursa(job #483208)
#include<fstream.h>
#define NMAX 120
long t,n,l,a[NMAX],b[NMAX],d[NMAX][NMAX],tc[NMAX][NMAX];
void cit()
{ifstream fin("lapte.in");
fin>>n>>l;
for(long i=1;i<=n;++i)
fin>>a[i]>>b[i];
fin.close();
}
long min(long a,long b)
{return a<b?a:b;}
bool check(long t)
{long i,j,k,val;
memset(d,-1,sizeof(d));
d[0][0]=0;
for(i=1;i<=n;++i)
{ for(j=0;j<=l;++j)
if(d[i-1][j]!=-1)
for(k=min(l-j,t/a[i]);k>=0;--k)
{val=(t-k*a[i])/b[i]+d[i-1][j];
if(val>d[i][j+k])
d[i][j+k]=val,tc[i][j+k]=j;
}
}
return d[n][l]>=l;
}
ofstream fout("lapte.out");
long cauta(long p,long u)
{long t=(p+u)/2;
if(p<=u)
{if(check(t))
return cauta(p,t-1);
else
return cauta(t+1,u);
}
else
if(p>u)
return p;
}
void afis(long i,long j)
{long x,y,p;
if(i!=0)
{p=tc[i][j];
y=d[i][j]-d[i-1][p];
x=j-p;;
afis(i-1,p);
fout<<x<<" "<<y<<'\n';
}
else
fout<<t<<'\n';
}
int main()
{cit();
t=cauta(1,100);
check(t);
afis(n,l);
fout.close();
return 0;
}