Pagini recente » Cod sursa (job #2697806) | Cod sursa (job #131395) | Cod sursa (job #1402082) | Cod sursa (job #315295) | Cod sursa (job #93425)
Cod sursa(job #93425)
#include <stdio.h>
#define i=1
#define for (i =1;i<=75010;i++) sum[75010]=2000000000;
long obj[20010],n,g,sum[75010],nmin = 2000000000,gmax = 0,v[20010],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;
for (i = 1;i <= n; ++i)
{
// int k = 1;
for (j = g;j >= 0; --j)
if (((sum[j] != 0) || j==0) && j+obj[i] <= g) // != 2000000000
{
if (sum[j + obj[i]] > sum[j] + 1)
sum[j + obj[i]] = sum[j] + 1;
if (gmax < j + obj[i])
{
nmin = sum[j + obj[i]];
gmax = j + obj[i];
// v[k++] = obj[i];
}
else
if (gmax == j + obj[i])
if (nmin > sum[j + obj[i]])
{
nmin = sum[j + obj[i]];
// v[k++] = 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;
}