Pagini recente » Cod sursa (job #2538635) | Cod sursa (job #2596017) | Cod sursa (job #2392288) | Cod sursa (job #3002135) | Cod sursa (job #2154432)
#include <iostream>
#include <fstream>
using namespace std;
int n,l,sol;
int d[110][110],best[110][110];
int a[110], b[110];
ifstream fin ("lapte.in");
ofstream fout ("lapte.out");
int verif (int t)
{
int i,j,k;
for(i=0; i<=n; i++)
d[i][0]=0;
for(i=0; i<=n; i++)
for(j=1; j<=l; j++)
d[i][j]=-2000000000;
for(i=1; i<=n; i++)
for(k=0; k<=t/a[i]; k++)
for(j=l; j>=k; j--)
{
if(d[i][j]<d[i-1][j-k]+(t-k*a[i])/b[i])
{
d[i][j]=d[i-1][j-k]+(t-k*a[i])/b[i];
best[i][j]=k;
}
}
if(d[n][l]>=l)
return 1;
return 0;
}
void solutie(int k, int liter)
{
if(k==0)
return;
solutie(k-1, liter-best[k][liter]);
fout<<best[k][liter]<<" "<<(sol-a[k]*best[k][liter])/b[k]<<"\n";
}
int main()
{
int i,j,mij,l1,l2;
fin>>n>>l;
for(i=1; i<=n; i++)
fin>>a[i]>>b[i];
l1=1;
l2=100;
while(l1<=l2)
{
mij=(l1+l2)/2;
if(verif(mij)==1)
{
sol=mij;
l2=mij-1;
}
else
l1=mij+1;
}
fout<<sol<<"\n";
solutie(n,l);
return 0;
}