Cod sursa(job #1358066)

Utilizator TarabanDragosTaraban Dragos-Petru TarabanDragos Data 24 februarie 2015 12:30:55
Problema Lapte Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <cstdio>
#include <fstream>
#define INF 200000000
using namespace std;
int n, L, i, j, p, u, mid, a[110], b[110], D[110][110];
FILE *f, *g;

int verif(int T){
	//D[i][j] = nr max de litri de lapte B daca bem i litri A cu j persoane;
	int S = 0, X, Y;
	for(i = 0; i <= n; i ++)
	{
		for(j = 0; j <= L; j ++)
		{
		D[i][j] = -1000;	
		}
	D[i][0] = 0;
	}
	
	for(i = 1; i <= n; i ++)
	{
		X = T / a[i];
		for(int k = 0; k <= X; k ++)
		{
			Y = (T - k * a[i])/ b[i];
			for(j=L;j>=k;j--){
				D[i][j] = max(D[i][j], D[i - 1][j - k] + Y);
			}
		}
	}
	for(i = 1; i <= n; i ++)
	{
		S += D[i][L];
	}
	if(S >= L)
		return 1;
	
	return 0;
}
int main(){
	f = fopen("lapte.in","r");
	g = fopen("lapte.out","w");
	fscanf(f,"%d%d",&n,&L);
	for(i = 1;i <= n;i ++){
		fscanf(f,"%d%d", &a[i], &b[i]);
	}
	p = 1;
	u = 100;
	while(p <= u){
		mid = (p + u) / 2;
		if( !verif(mid) )
			p = mid + 1;
		else
			u = mid - 1;
	}
	
	fprintf(g,"%d\n",p);
	
	fclose(f);
	fclose(g);
	return 0;
}