Pagini recente » Cod sursa (job #2080796) | Cod sursa (job #3338155) | Cod sursa (job #2970290) | Cod sursa (job #272041) | Cod sursa (job #3338154)
#include <fstream>
#include <algorithm>
#include <climits>
std::ifstream fin("ghiozdan.in");
std::ofstream fout("ghiozdan.out");
int N, Gmax;
int dp[75005];
int v[20000];
std::vector<std::vector<int>> result;
int main() {
dp[0] = 0;
fin >> N >> Gmax;
result.resize(Gmax);
for(int i = 1; i<=Gmax; i++) {
dp[i] = INT_MAX;
}
for(int i = 0; i<N; i++) {
fin >> v[i];
}
for(int i = 0; i<N; i++) {
for(int w = Gmax; w >= 0; w--) {
if(w-v[i] < 0) break;
if(dp[w] == INT_MAX && dp[w-v[i]] == INT_MAX) continue;
if(dp[w] > dp[w-v[i]] + 1) {
result[w] = result[w-v[i]];
result[w].push_back(v[i]);
}
dp[w] = std::min(dp[w], dp[w-v[i]] + 1);
}
}
int g = Gmax;
while(dp[g] == INT_MAX){
g--;
}
fout << g << " " << dp[g] << "\n";
for(const auto& x : result[g]) {
fout << x << "\n";
}
}