Pagini recente » Cod sursa (job #502769) | Cod sursa (job #1645684) | Cod sursa (job #731114) | Cod sursa (job #997788) | Cod sursa (job #3178936)
#include <fstream>
using namespace std;
ifstream cin ("ghiozdan.in");
ofstream cout ("ghiozdan.out");
const int dim = 75002;
int dp[dim], g[dim], tata[dim], frecv[dim];
int main()
{
int N, Gmax, i, j, g_actuala, nr_obiecte_posibile;
cin >> N >> Gmax;
for(i = 1; i <= N; i++)
cin >> g[i], frecv[g[i]]++;
dp[0] = 1;
for(i = dim; i > 0; i--)
{
if(frecv[i] != 0)
{
for(g_actuala = Gmax; g_actuala >= 0; g_actuala--)
{
if(dp[g_actuala] != 0)
{
nr_obiecte_posibile = min(frecv[i], (Gmax - g_actuala) / i);
for(j = 1; j <= nr_obiecte_posibile; j++)
{
if(dp[i * j + g_actuala] != 0)
break;
dp[i * j + g_actuala] = dp[g_actuala] + j;
tata[i * j + g_actuala] = i;
}
}
}
}
}
i = Gmax;
while(dp[i] == 0)
i--;
cout << i << " " << dp[i] - 1 << '\n';
while(dp[i] - 1 > 0)
{
cout << tata[i] << '\n';
i = i - tata[i];
}
return 0;
}