Pagini recente » Cod sursa (job #183255) | Cod sursa (job #711670) | Cod sursa (job #135361) | Cod sursa (job #2374644) | Cod sursa (job #1896408)
#include <bits/stdc++.h>
using namespace std;
const int N=105;
int n,L,A[N],B[N],T,d[N][N],last[N][N],val,x,y;
struct sol{
int a,b;
} aux;
stack <sol> st;
void print(){
printf("%d\n",T);
x=n, y=L;
int k;
while(x!=0){
k=last[x][y];
aux.a=k;
aux.b=(T-k*A[x])/B[x];
st.push(aux);
x--, y-=aux.a;
}
while(!st.empty()){
printf("%d %d\n",st.top().a,st.top().b);
st.pop();
}
}
int main()
{
freopen("lapte.in","r",stdin);
freopen("lapte.out","w",stdout);
int i,j,k;
scanf("%d%d",&n,&L);
for(i=1;i<=n;i++) scanf("%d%d",&A[i],&B[i]);
for(T=1;T<=100;T++){
for(i=1;i<=n;i++)
for(j=0;j<=L;j++) d[i][j]=0;
for(i=1;i<=n;i++){
for(j=0;j*A[i]<=T;j++){
for(k=L;k>=0;k--){
if(i==1 and k-j!=0) continue;
if(j>k) continue;
val=d[i-1][k-j]+(T-j*A[i])/B[i];
if(val>d[i][k]){
d[i][k]=val;
last[i][k]=j;
}
}
}
}
if(d[n][L]>=L){
print();
break;
}
}
return 0;
}