Pagini recente » Cod sursa (job #2679957) | Cod sursa (job #185527) | Cod sursa (job #1220056) | Cod sursa (job #246857) | Cod sursa (job #1140541)
#include <fstream>
using namespace std;
ifstream f("lapte.in");
ofstream g("lapte.out");
int n, l, i, j, k, p, q, a[110], b[110], d[110], c[110][110], v[110][110], P[110][110], maxim, s, t, nr, x;
int main(){
f>>n>>l;
for(i=1; i<=n; i++)
f>>a[i]>>b[i];
q=101;
while(p+1<q)
{
t=(p+q)/2;
for(i=0; i<101; i++)
for(j=0; j<101; j++)
{
c[i][j]=0;
v[i][j]=0;
P[i][j]=0;
}
for(j=0; j<=t/a[1]; j++)
{
c[1][j]=(t-a[1]*j)/b[1];
v[1][j]=j;
P[1][j]=1;
}
for(i=2; i<=n; i++)
{
for(j=0; j<=l; j++)
{
maxim=-1;
nr=0;
for(k=0; k<=j; k++)
if(a[i]*k<=t)
{
x=(t-a[i]*k)/b[i];
if(c[i-1][j-k]+x>maxim && P[i-1][j-k]==1)
{
maxim=c[i-1][j-k]+x;
nr=k;
}
}
else break;
c[i][j]=maxim;
v[i][j]=nr;
if(maxim==-1) P[i][j]=0;
else P[i][j]=1;
}
}
if(c[n][l]>=l)
{
s=t;
k=l;
for(i=n; i>0; i--)
{
d[i]=v[i][k];
k-=v[i][k];
}
q=t;
}
else p=t;
}
g<<s<<"\n";
for(i=1; i<=n; i++)
{
g<<d[i]<<' ';
k=(s-d[i]*a[i])/b[i];
g<<k<<"\n";
}
return 0;
f.close();
g.close();
}