Pagini recente » Cod sursa (job #3004253) | Cod sursa (job #1309778) | Cod sursa (job #3125199) | Cod sursa (job #1923952) | Cod sursa (job #1896452)
#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;
while(x>0){
aux.a=last[x][y];
aux.b=(T-aux.a*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=0;T<=100;T++){
for(i=0;i<=n;i++)
for(j=0;j<=L;j++) d[i][j]=-10000000;
d[0][0]=0;
for(i=1;i<=n;i++){
for(k=0;k*A[i]<=T;k++){
val=(T-k*A[i])/B[i];
for(j=L;j>=0;j--){
if(k>j) break;
if(d[i-1][j-k]+val>d[i][j]){
d[i][j]=d[i-1][j-k]+val;
last[i][j]=k;
}
}
}
}
if(d[n][L]>=L){
print();
break;
}
}
return 0;
}