Pagini recente » Cod sursa (job #2408268) | Cod sursa (job #1309326) | Cod sursa (job #2924666) | 14_martie_simulare_oji_2024_clasele_11_12 | Cod sursa (job #911622)
Cod sursa(job #911622)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("lapte.in");
ofstream g("lapte.out");
int a[101],b[101],p=0,q=101,d[101],c[101][101],val[101][101],pot[101][101],i,j,k,n,l,maxim,sol,t,nr,x;;
int main()
{
f>>n>>l;
for(i=1;i<=n;i++)
f>>a[i]>>b[i];
while(p+1<q)
{
t=(p+q)/2;
for(i=0;i<=100;i++)
for(j=0;j<=100;j++)
{
c[i][j]=0;
val[i][j]=0;
pot[i][j]=0;
}
for(j=0;j<=t/a[1];j++)
{
c[1][j]=(t-a[1]*j)/b[1];
val[1][j]=j;
pot[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 && pot[i-1][j-k]==1)
{
maxim=c[i-1][j-k]+x;
nr=k;
}
}
else break;
c[i][j]=maxim;
val[i][j]=nr;
if(maxim==-1) pot[i][j]=0;
else pot[i][j]=1;
}
}
if(c[n][l]>=l)
{
sol=t; k=l;
for(i=n;i>=1;i--)
{
d[i]=val[i][k];
k-=val[i][k];
}
q=t;
}
else p=t;
}
g<<sol<<'\n';
for(i=1;i<=n;i++)
{
g<<d[i]<<' ';
k=(sol-d[i]*a[i])/b[i];
g<<k<<'\n';
}
return 0;
f.close();
g.close();
}