Cod sursa(job #137515)

Utilizator RobytzzaIonescu Robert Marius Robytzza Data 17 februarie 2008 12:32:28
Problema Garaj Scor 0
Compilator cpp Status done
Runda preONI 2008, Runda 4, Clasa a 10-a Marime 1.19 kb
#include <stdio.h>
#include <fstream.h>
#define MAX 300000

int a[MAX/10],b[MAX/10],sir[MAX],nr[MAX],cost[MAX],ala[MAX];
int n,K;

void citire()
{
   freopen ("garaj.in","r",stdin);
   scanf ("%d%d",&n,&K);
   for (int i=0;i<n;i++)
      scanf("%d%d",&a[i],&b[i]);
   fclose(stdin);
}

void ruc()
{
   sir[0]=1;
   long num=0;
   for (int o=1;o<=K;o++)
   {
      sir[o]=b[0]*((o+a[0]-1)/a[0]);
      nr[o]=sir[o]/b[0]*a[0];
   }
   for (int i=1;i<n;i++)
     for (int j=1;j<=K;j++)
       if (sir[j]>b[i]*((j+a[i]-1)/a[i]) )
       {
	 if(nr[j]>(b[i]*((j+a[i]-1)/a[i])) /b[i]*a[i])
	 {
	  sir[j]=b[i]*((j+a[i]-1)/a[i]);
	  for (int d=j;d>j-a[i];d--)
	  {
	      if (nr[d]>(b[i]*((j+a[i]-1)/a[i])) /b[i]*a[i] || nr[d]<(b[i]*((j+a[i]-1)/a[i])) /b[i]*a[i])
	      {
	      nr[d]=(b[i]*((j+a[i]-1)/a[i])) /b[i]*a[i];
	      cost[d]=i;
	      }
	  }
       }  }
       int e;
    for (e=0;e<=K;e++)
	 ala[cost[e]]=1;
    long max=0;
    for (e=0;e<=K;e++)
    {
      if (sir[e]>max)
	max=sir[e];
       num+=ala[e];
    }
    ofstream fout ("garaj.out");
    fout<<max<<" "<<num;
    fout.close();

}

int main ()
{
   citire();
   ruc();
   return 0;
}