Pagini recente » Cod sursa (job #1622008) | Cod sursa (job #1605654) | Cod sursa (job #1779265) | Cod sursa (job #1871171) | Cod sursa (job #1367986)
#include <fstream>
#define DIM 105
#define INF 0x3f3f3f3f
using namespace std;
ifstream fin("lapte.in");
ofstream fout("lapte.out");
int N,L,A[DIM],B[DIM],p,u,mid,D[DIM][DIM],T[DIM][DIM],sol;
int ok(int x){
for(int i=0;i<=N;i++){
for(int j=0;j<=L;j++)
D[i][j]=-INF;
D[i][0]=0;
}
for(int i=1;i<=N;i++){
int a=x/A[i];
for(int d=0;d<=a;d++){
int b=(x-d*A[i])/B[i];
for(int j=L;j>=d;j--)
if(D[i][j]<D[i-1][j-d]+b){
D[i][j]=D[i-1][j-d]+b;
T[i][j]=d;
}
}
}
return D[N][L]>=L;
}
void drum(int x,int y){
if(x>1)
drum(x-1,y-T[x][y]);
fout<<y<<" "<<D[x][y]-D[x-1][y-T[x][y]]<<"\n";
}
int main(){
fin>>N>>L;
for(int i=1;i<=N;i++)
fin>>A[i]>>B[i];
p=1;
u=100;
while(p<=u){
mid=(p+u)>>1;
if(ok(mid)){
sol=mid;
u=mid-1;
}
else
p=mid+1;
}
fout<<sol<<"\n";
ok(sol);
drum(N,L);
fin.close();fout.close();
return 0;
}