Pagini recente » Cod sursa (job #2951823) | Cod sursa (job #1604290) | Cod sursa (job #324290) | Cod sursa (job #1822922) | Cod sursa (job #2541654)
#include <fstream>
#include <algorithm>
#include <vector>
#define NM 105
#define oo 2e9
using namespace std;
ifstream f("lapte.in");
ofstream g("lapte.out");
int n,l,st,dr,mijl,i,rasp;
int a[NM],b[NM];
int d[NM][NM],bk[NM][NM];
vector < pair < int,int > > r;
int verif(int t){
int i,j,k;
for(i=0;i<=n;i++)
for(j=0;j<=l;j++)
d[i][j]=-oo;
d[0][0]=0;
for(i=1;i<=n;i++)
for(j=0;j<=l;j++)
for(k=0;k<=j&&k*a[i]<=t;k++){
int x;
x=(t-k*a[i])/b[i];
if(d[i][j]<d[i-1][j-k]+x){
bk[i][j]=j-k;
d[i][j]=d[i-1][j-k]+x;
}
}
return (d[n][l]>=l);
}
int main()
{
f>>n>>l;
for(i=1;i<=n;i++)
f>>a[i]>>b[i];
st=1; dr=105;
while(st<=dr){
mijl=(st+dr)/2;
if(verif(mijl)==1){
rasp=mijl;
dr=mijl-1;
} else st=mijl+1;
}
verif(rasp);
while(n!=0){
r.push_back({l-bk[n][l],d[n][l]-d[n-1][bk[n][l]]});
n--; l=bk[n][l];
}
g<<rasp<<'\n';
for(i=r.size()-1;i>=0;i--) g<<r[i].first<<' '<<r[i].second<<'\n';
return 0;
}