Pagini recente » Cod sursa (job #2799448) | Cod sursa (job #1184095) | Cod sursa (job #2248220) | Cod sursa (job #1986467) | Cod sursa (job #207368)
Cod sursa(job #207368)
#include <fstream>
using namespace std ;
int a[100], b[100] ;
bool g[101][101];
int v[101][101][2];
int sol[100][2];
int
main ( ) {
ifstream is ( "lapte.in" ) ;
ofstream os ( "lapte.out" ) ;
int n , m , i , lo, hi , t, u , x , k , s , q ;
is >> n >> m ;
for ( i = 0 ; n > i ; ++ i ) {
is >> a[i] ;
is >> b[i] ;
}
lo = 1, hi = 100 ;
while (lo < hi) {
t = ( lo + hi ) / 2 ;
for ( u = 0 ; m >= u ; ++ u ) {
for ( x = 0 ; m >= x ; ++ x ) {
g[u][x] = false ;
}
}
bool b2 ;
for ( k = 0 ; n > k ; ++ k ) {
for ( u = m ; 0 <= u ; -- u ) {
for ( x = m ; 0 <= x ; -- x ) {
if (g[u][x]) continue ;
for ( s = t/a[k]; 0 <= s ; -- s ) {
q = (t-s*a[k])/b[k];
b2 = false ;
if ((u <= s) && (x <= q)) {
b2 = true ;
} else if (u <= s) {
b2 = g[0][x-q] ;
} else if (x <= q) {
b2 = g[u-s][0] ;
} else {
b2 = g[u-s][x-q] ;
}
if (b2) {
g[u][x] = true ; v[u][x][0]=k ; v[u][x][1]=s ; break ;
}
}
}
}
}
if ( g[m][m] ) {
hi = t ;
} else {
lo = t+1;
}
}
t = lo ;
for (i=0;i<n;i++) {
sol[i][0]=0;
sol[i][1]=0;
}
u=m;
x=m;
while(0!=u || 0!=x) {
k=v[u][x][0];
s=v[u][x][1];
q=(t-s*a[k])/b[k];
sol[k][0]=s;
sol[k][1]=q;
if(u<=s && x<=q) u=0,x=0; else u-=s,x-=q;
}
os << t << endl ;
for(i=0;i<n;i++) {
os << sol[i][0] << ' ' << sol[i][1] << endl ;
}
return 0 ;
}