Pagini recente » Statistici Micu Cristian (Cr1styYy) | Istoria paginii runda/simci2 | Cod sursa (job #1658097) | Cod sursa (job #438438) | Cod sursa (job #1954768)
#include <iostream>
#include <fstream>
#include <cstring>
#define nmax 105
using namespace std;
int d[nmax][nmax],a[nmax][nmax];
int n,l,x,y,m,ans;
pair <int,int> v[nmax];
ofstream fout("lapte.out");
int din(int t)
{ memset(d,-1,sizeof(d));
d[0][0]=0;
for(int i=0;i<n;i++)
for(int j=0;j<=l;j++)
for(int k=0; k<=t/v[i+1].first;k++)
if(d[i][j]!=-1)
{
int q=(t-k*v[i+1].first)/v[i+1].second;
if(d[i+1][j+k]<d[i][j]+q)
{
d[i+1][j+k]=d[i][j]+q;
a[i+1][j+k]=k;
}
}
if(d[n][l]>=l) return 1;
return 0;
}
void afisare(int i,int L)
{ if(i>1) afisare(i-1,L-a[i][L]);
fout<<a[i][L]<<' '<<((ans-a[i][L]*v[i].first)/v[i].second)<<'\n';
}
int main()
{
ifstream fin("lapte.in");
fin>>n>>l;
for(int i=1;i<=n;i++) fin>>v[i].first>>v[i].second;
x=1;y=100;
while(x<=y)
{
m=(x+y)/2;
if(din(m))
{
ans=m;
y=m-1;
}
else x=m+1;
}
fout<<ans<<'\n';
din(ans);
afisare(n,l);
return 0;
}