Pagini recente » Cod sursa (job #1677919) | Cod sursa (job #1970024) | Cod sursa (job #2011375) | Cod sursa (job #22150) | Cod sursa (job #1663218)
#include <cstdio>
#define MAXN 100
int mat[MAXN+1][MAXN+1][MAXN+1],n,A[MAXN+1],B[MAXN+1],l;
int lin,col,z,nextl[MAXN+1][MAXN+1][MAXN+1],nextc[MAXN+1][MAXN+1][MAXN+1],vl[MAXN+1],vc[MAXN+1];
inline int cauta(int rez){
int i,j,i1,j1,flag=0,x;
for(i=0;i<=l;i++)
for(j=0;j<=l;j++)
for(x=0;x<=l;x++)
mat[i][j][x]=0;
mat[0][0][0]=1;
for(i=1;i<=n;i++){
j=0;
while(A[i]*j<=rez){
x=(rez-A[i]*j)/B[i];
for(i1=0;i1<=l;i1++)
for(j1=0;j1<=l;j1++){
if(i1+j<=l&&j1+x<=l){
if(mat[i-1][i1][j1]>0){
mat[i][i1+j][j1+x]+=mat[i-1][i1][j1];
nextl[i][i1+j][j1+x]=i1;
nextc[i][i1+j][j1+x]=j1;
}
}
else
if(mat[i-1][i1][j1]>0&&i1+j>=l&&j1+x>=l){
flag=1;
vl[i]=j;
vc[i]=x;
lin=i1;
col=j1;
z=i-1;
}
}
j++;
}
}
return flag;
}
int main(){
FILE*fi,*fout;
int pas,rez,i,auxl,auxc;
fi=fopen("lapte.in" ,"r");
fout=fopen("lapte.out" ,"w");
fscanf(fi,"%d%d" ,&n,&l);
for(i=1;i<=n;i++)
fscanf(fi,"%d%d" ,&A[i],&B[i]);
rez=0;
for(pas=1<<10;pas;pas>>=1)
if(cauta(rez+pas)==0)
rez+=pas;
fprintf(fout,"%d\n" ,rez+1);
cauta(rez+1);
while(z>0){
vl[z]=lin-nextl[z][lin][col];
vc[z]=col-nextc[z][lin][col];
auxl=lin;
auxc=col;
lin=nextl[z][auxl][auxc];
col=nextc[z][auxl][auxc];
z--;
}
for(i=1;i<=n;i++)
fprintf(fout,"%d %d\n" ,vl[i],vc[i]);
fclose(fi);
fclose(fout);
return 0;
}