Pagini recente » Cod sursa (job #2164019) | Cod sursa (job #1128334) | Cod sursa (job #1385492) | Rating Blanaru Paul (BlanaruPaul) | Cod sursa (job #2170490)
#include <fstream>
#include <vector>
using namespace std;
ifstream in ("lapte.in");
ofstream out ("lapte.out");
const int N=102;
const int INF=1000000000;
int n,l,a[N],b[N],d[N][N],v[N][N];
vector < pair<int,int> > ans;
bool verif(int x)
{
int i,j,t;
for (i=0;i<N-1;i++)
for (j=0;j<N-1;j++)
d[i][j]=-INF;
d[0][0]=0;
for (i=1;i<=n;i++)
for (j=0;j<=l;j++)
for (t=0;t<=x/a[i] && t<=j;t++)
if (d[i][j]<d[i-1][j-t]+(x-t*a[i])/b[i])
{
d[i][j]=d[i-1][j-t]+(x-t*a[i])/b[i];
v[i][j]=t;
}
if (d[n][l]>=l)
return 1;
return 0;
}
int main()
{
int i,j,st=1,dr=N-2,x;
in>>n>>l;
for (i=1;i<=n;i++)
in>>a[i]>>b[i];
while (st!=dr)
{
int mij=(st+dr)/2;
if (verif(mij))
dr=mij;
else
st=mij+1;
}
verif(st);
x=st;
for (i=n,j=l; i>=1; j-=v[i][j],i--)
ans.push_back(make_pair(v[i][j],(x-v[i][j]*a[i])/b[i]));
out<<x<<"\n";
for (i=n-1;i>=0;i--)
out<<ans[i].first<<" "<<ans[i].second<<'\n';
return 0;
}