Pagini recente » Cod sursa (job #241072) | Cod sursa (job #85333)
Cod sursa(job #85333)
#include <stdio.h>
#include <string>
#define maxn 20010
#define maxx 75010
#define maxk 210
int n,m,p,r;
int a[maxn];
int c[maxx],d[maxx],v[maxx];
int C[maxk];
int main()
{
freopen("ghiozdan.in","r",stdin);
freopen("ghiozdan.out","w",stdout);
scanf("%d %d ",&n,&m);
int i,j,k;
for (i=1;i<=n;i++)
{
scanf("%d ",&a[i]);
C[a[i]]++;
}
c[0]=0;
for (i=1;i<=m;i++) c[i]=maxn;
for (i=1;i<maxk;i++)
{
memcpy(d,c,sizeof(c));
for (j=0;j<i;j++)
{
p=r=0;
v[0]=j;
for (k=j+i;k<=m;k+=i)
{
while ((p<=r) && (d[v[r]]+(k-v[r])/i>=d[k])) r--;
r++;
v[r]=k;
while (v[p]<k-i*C[i]) p++;
if ((p<=r) && (d[v[p]]+(k-v[p])/i<c[k])) c[k]=d[v[p]]+(k-v[p])/i;
}
}
}
for (i=m;i>0;i--)
if (c[i]!=maxn)
{
printf("%d %d\n",i,c[i]);
break;
}
return 0;
}