Pagini recente » Cod sursa (job #621579) | Cod sursa (job #3042404) | Cod sursa (job #2788573) | Cod sursa (job #1117411) | Cod sursa (job #507806)
Cod sursa(job #507806)
#include <cstdio>
#define nmax 20010
#define gmax 75010
#define inf 100000
int n, g, l, v[nmax], f[210], d[2][gmax], q[gmax], p[gmax];
int main()
{
freopen("ghiozdan.in","r",stdin);
freopen("ghiozdan.out","w",stdout);
scanf("%d %d",&n,&g);
int i, j, r, st, dr, x, c, idx, pr, k, y;
for (i=1; i<=n; i++)
{
scanf("%d",&v[i]);
if (v[i]>l) l=v[i];
f[v[i]]++;
}
for (i=1; i<=g; i++) d[0][i]=inf;
idx=0;
for (i=1; i<=l; i++)
{
if (f[i])
{
pr=idx;
idx=!idx;
for (j=0; j<i; j++)
{
st=1;
dr=0;
for (k=j; k<=g; k+=i)
{
while (st<=dr && p[st]<k-f[i]*i) st++;
while (dr>=st && d[pr][k]-(k/i)<=q[dr]) dr--;
q[++dr]=d[pr][k]-(k/i);
p[dr]=k;
if (st<=dr)
d[idx][k]=d[pr][p[st]]+(k-p[st])/i;
}
}
}
}
for (i=g; i>=0 && d[idx][i]>=inf; i--);
printf("%d %d\n",i,d[idx][i]);
}