Pagini recente » Cod sursa (job #2597125) | Cod sursa (job #2593810) | Cod sursa (job #530110) | Cod sursa (job #318641) | Cod sursa (job #715173)
Cod sursa(job #715173)
#include <fstream>
#include <cstring>
#include <cstdio>
#define NMAx 110
using namespace std;
int N,L,Timp,A[NMAx],B[NMAx];
int Best[NMAx][NMAx],T[NMAx][NMAx];
int Sol[NMAx][NMAx];
ofstream out("lapte.out");
void afis(int i,int j) {
if(i-1)
afis(i-1,j-Sol[i][j]);
out<<Sol[i][j]<<' '<<((Timp-Sol[i][j]*A[i])/B[i])<<'\n';
}
bool Solution(int t) {
int i,l,k,Val;
memset(Best,-100,sizeof(Best));
Best[0][0]=0;
for(i=1;i<=N;i++)
for(l=0;l<=L;l++)
for(k=0;k<=l&&k<=t/A[i];k++) {
Val=Best[i-1][l-k]+(t-k*A[i])/B[i];
if(Best[i][l]<Val) {
Best[i][l]=Val;
T[i][l]=k;
}
}
if(Best[N][L]>=L)
return 1;
return 0;
}
void solve() {
int Step;
for(Step=1;Step<=NMAx;Step++)
if(Solution(Step)) {
Timp=Step;
memcpy(Sol,T,sizeof(T));
return;
}
}
void citire() {
ifstream in("lapte.in");
in>>N>>L;
for(int i=1;i<=N;i++)
in>>A[i]>>B[i];
in.close();
}
int main() {
citire();
solve();
out<<Timp<<'\n';
afis(N,L);
out.close();
return 0;
}