Pagini recente » Cod sursa (job #1296370) | Cod sursa (job #106331) | Cod sursa (job #1303359) | Cod sursa (job #1527748) | Cod sursa (job #50328)
Cod sursa(job #50328)
#include <cstdio>
#include <cstring>
#define Gdim 75001
#define Ndim 20001
int N;
int Nmin[2][Gdim];
long G, Gmax;
char A[Ndim];
void get_data();
void dynamics();
void print();
int main()
{
get_data();
dynamics();
print();
return 0;
}
void get_data()
{
freopen("ghiozdan.in", "r", stdin);
int i, value;
for(scanf("%d %ld", &N, &G), i=1; i<=N; ++i)
{
scanf("%d", &value);
A[i] = value;
}
fclose(stdin);
}
void dynamics()
{
int i; long j;
for(j=0; j<=G; ++j)
Nmin[1][j] = N+1;
Nmin[1][A[1]] = 1;
for(i=2; i<=N; ++i)
{
for(j=0; j<=A[i]; ++j)
Nmin[i&1][j] = Nmin[(i-1)&1][j];
Nmin[i&1][A[i]] = 1;
for(j=A[i]+1; j<=G; ++j)
{
Nmin[i&1][j] = Nmin[(i-1)&1][j];
if(Nmin[(i-1)&1][j-A[i]] && Nmin[(i-1)&1][j-A[i]] + 1 < Nmin[i&1][j])
Nmin[i&1][j] = Nmin[(i-1)&1][j-A[i]] + 1;
}
}
for(j=G; j; --j)
if(Nmin[N&1][j] != N+1)
{
Gmax = j;
break;
}
}
void print()
{
freopen("ghiozdan.out", "w", stdout);
printf("%ld %d\n", Gmax, Nmin[N&1][Gmax]);
fclose(stdout);
}