Pagini recente » Cod sursa (job #1339051) | Cod sursa (job #1477087) | Cod sursa (job #3178025) | Cod sursa (job #2062283) | Cod sursa (job #18119)
Cod sursa(job #18119)
#include <stdio.h>
#include <fstream>
using namespace std;
#define in "ghiozdan.in"
#define out "ghiozdan.out"
#define dim 75001
#define infinit 100001
#define dim2 20001
int t[dim], a[2][dim], nr[dim];
int v[dim2];
int G, N;
int Gmax=0, Nmin=0;
int main()
{
freopen(in,"r",stdin);
freopen(out,"w",stdout);
scanf( "%d%d", &N, &G );
for ( int i = 1; i <= N; i++ )
{
scanf( "%d", &v[i] );
}
a[0][v[1]] = 1;
nr[v[1]] = 1;
for ( int i = 1; i <= N; i++ )
{
a[1][v[i]] = 1;
nr[v[i]] = 1;
if ( Gmax < v[i] )
{
Gmax = v[i];
Nmin = nr[v[i]];
}
else if ( Gmax == v[i] && Nmin > 1 ) Nmin = 1;
for ( int j = 0; j <= G-v[i]; j++ )
{
if ( a[0][j] == 1 )
{
if ( a[1][j+v[i]] == 0 )
{
a[1][j+v[i]] = 1;
nr[j+v[i]] = nr[j] + 1;
if ( Gmax < j+v[i] )
{
Gmax = j+v[i];
Nmin = nr[j+v[i]];
}
else if ( Gmax == j + v[i] && Nmin > nr[j+v[i]] ) Nmin = nr[j+v[i]];
}
else
{
if ( a[1][j+v[i]] == 1 && nr[j+v[i]] > nr[j] + 1 )
{
nr[j+v[i]] = nr[j] + 1;
if ( Gmax < j+v[i] )
{
Gmax = j+v[i];
Nmin = nr[j+v[i]];
}
else if ( Gmax == j + v[i] && Nmin > nr[j+v[i]] ) Nmin = nr[j+v[i]];
}
}
}
}
for ( int j = 0; j <= G; j++ )
if ( a[0][j] == 0 && a[1][j] == 1 ) a[0][j] = 1;
}
printf( "%d %d\n", Gmax, Nmin+1 );
}