Pagini recente » Cod sursa (job #2227684) | Cod sursa (job #1797906) | Cod sursa (job #2978366) | Cod sursa (job #2149870) | Cod sursa (job #1951947)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("lapte.in");
ofstream fout ("lapte.out");
int n,l,m[102][102],ma[102][102],qq,maxo;
struct{
int a,b;
}v[102];
int doit(int T){
for(int i=0;i<=n;++i)
for(int j=0;j<=100;++j)
m[i][j]=-1;
m[0][0]=0;
for(int i=0;i<n;++i){
for(int j=0;j<=l;++j){
if(m[i][j]!=-1){
for(int k=0;k<=T/v[i+1].b;++k){
int w=m[i][j]+(T-k*v[i+1].b)/v[i+1].a;
if(w>m[i+1][k+j]){m[i+1][k+j]=w;ma[i+1][k+j]=j;}
}
}
}
}
for(int i=l;i<=100;++i)
if(m[n][i]>=l)return i;
else return 0;
}
void recurs(int qqq, int qq){
if(!qqq)return;
recurs(qqq-1,ma[qqq][qq]);
fout<<m[qqq][qq]-m[qqq-1][ma[qqq][qq]]<<' '<<qq-ma[qqq][qq]<<'\n';
}
int main()
{
int maxx=-1;
fin>>n>>l;
for(int i=1;i<=n;++i)
fin>>v[i].a>>v[i].b;
int p=1,q=100;
while(p<=q){
int mt=(p+q)/2,qq=doit(mt);
if(qq){maxx=mt;q=mt-1;maxo=qq;}
else p=mt+1;
}
doit(maxx);
fout<<maxx<<'\n';
recurs(n,maxo);
return 0;
}