Pagini recente » Cod sursa (job #1885914) | Cod sursa (job #1264808) | Cod sursa (job #573979) | Cod sursa (job #293550) | Cod sursa (job #1961186)
#include <iostream>
#include <fstream>
#define DIM 101
using namespace std;
ifstream f("lapte.in");
ofstream g("lapte.out");
int la[DIM],lb[DIM],s[DIM][DIM],n,l,r[DIM][DIM],ans;
bool verif(int x)
{
for(int i=0;i<=n;++i)
for(int j=0;j<=l;++j)
{ s[i][j]=-(DIM*DIM); r[i][j]=0;}
s[0][0]=0;
for(int i=1;i<=n;++i)
for(int j=0;j<=l&&j*la[i]<=x;++j)
for(int k=0;k+j<=l;++k)
{
int y=s[i-1][k]+(x-j*la[i])/lb[i];
if(s[i][k+j]<y)s[i][k+j]=y,r[i][k+j]=j;
}
if(l<=s[n][l])return true; return false;
}
void write(int n1,int k1)
{
g<<r[n1][k1]<<" "<<(ans-r[n1][k1]*la[n1])/lb[n1]<<'\n';
if(n1!=1)write(n1-1,k1-r[n1][k1]);
}
void solve()
{
f>>n>>l;
for(int i=n;i>=1;i--)f>>la[i]>>lb[i];
int i,j,m;
i=1; j=20001;
while(i<=j)
{
m=(i+j)/2;
if(verif(m)==true)
j=m-1;
else
i=m+1;
}
ans=i;
g<<i<<'\n';
verif(ans);
write(n,l);
}
int main()
{
solve();
return 0;
}