Pagini recente » Cod sursa (job #2887831) | Cod sursa (job #137515)
Cod sursa(job #137515)
#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;
}