Pagini recente » Cod sursa (job #521391) | Cod sursa (job #702597) | Cod sursa (job #1023898) | Cod sursa (job #1609792) | Cod sursa (job #93432)
Cod sursa(job #93432)
#include <stdio.h>
long obj[20010],n,g,sum[75010],nmin = 2000000000,gmax = 0,sel[75010],k=0;
int main ()
{
long i,j;
freopen ("ghiozdan.in","r",stdin);
freopen ("ghiozdan.out","w",stdout);
scanf ("%ld",&n);
scanf ("%ld",&g);
for (i = 1;i <= n; ++i)
scanf("%ld",&obj[i]);
/* for (i = 1; i <= n; ++i)
printf("%ld ",obj[i]);
for (i = 1;i <= g; ++i)
sum[i] = 2000000000;
sum[0] = 0;
*/
sel[0] = 1;
for (i = 1;i <= n; ++i)
{
// int k = 1;
for (j = g;j >= 0; --j)
if (sel[j] && j+obj[i] <= g) // != 2000000000
{
if (sum[j + obj[i]] > sum[j] + 1 || sel[j + obj[i]] == 0)
{
sum[j + obj[i]] = sum[j] + 1;
sel[j + obj[i]] = 1;
}
if (gmax < j + obj[i])
{
nmin = sum[j + obj[i]];
gmax = j + obj[i];
}
else
if (gmax == j + obj[i])
if (nmin > sum[j + obj[i]])
{
nmin = sum[j + obj[i]];
}
}
}
/* int gasit = 0;
i = g;
while (!gasit)
{
if (sum[i] != 2000000000)
gasit = 1;
else
i--;
}
*/
printf ("%ld %ld",gmax,nmin);
// for (i = 1;i <= nmin; ++i)
// printf ("%ld\n",v[i]);
return 0;
}