Pagini recente » Cod sursa (job #2316820) | Cod sursa (job #1278336) | Cod sursa (job #1785790) | Cod sursa (job #408424) | Cod sursa (job #1174426)
#include <fstream>
#include <vector>
#define in "ghiozdan.in"
#define out "ghiozdan.out"
class Ghiozdan
{
protected :
int N, G;
std :: vector < int > HowMuch, Parent, Mark, DP;
public :
void Read_Input() {
std :: ifstream f(in);
f >> N >> G;
HowMuch.resize(201), Parent.resize(G + 1), Mark.resize(G + 1);
for(int i = 1, val; i <= N; ++i) f >> val, HowMuch[val] ++;
f.close();
}
void Solve() {
Mark[0] = 1;
for(int i = 200; i >= 1; --i)
for(int j = G - i; j >= 0 && HowMuch[i]; --j)
for(int t = 1; Mark[j] && t <= HowMuch[i] && t * i + j <= G && !Mark[t * i + j]; ++t) {
Mark[t * i + j] = Mark[j] + t;
Parent[t * i + j] = i;
}
}
void Write_Output() {
int ans;
std :: ofstream g(out);
for(ans = G; !Mark[ans]; ans--);
g << ans << ' ' << Mark[ans] - 1 << '\n';
while(ans != Parent[ans] && ans >= 0) {
g << Parent[ans] << '\n';
ans -= Parent[ans];
}
g << Parent[ans] << '\n';
g.close();
}
} my_obj;
int main()
{
my_obj.Read_Input();
my_obj.Solve();
my_obj.Write_Output();
return 0;
}