Pagini recente » Cod sursa (job #1599683) | Cod sursa (job #1983619) | Cod sursa (job #1837730) | Cod sursa (job #1133116) | Cod sursa (job #1549083)
#include <iostream>
#include <cstdio>
using namespace std;
const int N_max = 20000;
const int G_max = 75000;
const int INF = 20001;
bool posibil[G_max+1];
int g[N_max+1];
int nr[G_max+1]; //nr[i] == NR MINIM DE OBIECTE CU CARE POT SA FORMEZ GREUTATEA i
int last[G_max+1]; //last[i] == ULTIMUL OBIECT ALES
int N,G;
int Max;
int main()
{
freopen("ghiozdan.in", "r", stdin);
freopen("ghiozdan.out", "w", stdout);
int i, j;
scanf("%d %d", &N, &G);
for(i = 1; i <= N; i++) scanf("%d", &g[i]);
for(i = 1; i <= G; i++)
{
posibil[i] = false;
nr[i] = INF;
}
posibil[0] = true;
nr[0] = 0;
last[0] = -1;
for(i = 1; i <= N; i++)
for(j = G; j >= g[i]; j--)
if(posibil[j - g[i]] == true)
{
posibil[j] = true;
if(nr[j - g[i]] != INF && nr[j] > nr[j - g[i]] + 1)
{
nr[j] = nr[j - g[i]] + 1;
//last[j] = i; // AM ALES OBIECTUL i
}
if(Max < j) Max = j;
}
printf("%d %d\n", Max, nr[Max]);
//for(i = 0; i <= G; i++) printf("%d ", last[i]);
return 0;
}