Pagini recente » Cod sursa (job #2469990) | Cod sursa (job #1340736) | Cod sursa (job #950888) | Cod sursa (job #2125260) | Cod sursa (job #715176)
Cod sursa(job #715176)
#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 i=0,Step=100;
for(;Step;Step>>=1)
if(Solution(100-i-Step)) {
i+=Step;
memcpy(Sol,T,sizeof(T));
}
Timp=100-i;
}
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;
}