Pagini recente » Cod sursa (job #948282) | Cod sursa (job #591560) | Cod sursa (job #916717) | Cod sursa (job #706911) | Cod sursa (job #2121434)
#include <fstream>
#include <vector>
using namespace std;
constexpr int kMaxBlocks = 18;
inline int Bit(int num, int pos)
{
return (num & (1 << pos)) ? 1 : 0;
}
int SubCost(int conf, const vector<int> &vec)
{
int cost = 0;
for (int i = kMaxBlocks; i >= 0; --i) {
if (Bit(conf, i) == 1) {
cost += vec[i];
}
}
return cost;
}
int Solve(const vector<int> &vec, int cap)
{
auto confs = (1 << vec.size());
vector<int> cost(confs, vec.size());
cost[0] = 0;
for (int i = 1; i < confs; ++i) {
int sub = i;
while (sub > 0) {
if (SubCost(sub, vec) <= cap) {
auto reversed = i ^ sub;
auto new_cost = cost[reversed] + 1;
cost[i] = min(cost[i], new_cost);
}
sub = (sub - 1) % i;
}
}
return cost[confs - 1];
}
int main()
{
ifstream fin("zebughil.in");
ofstream fout("zebughil.out");
for (int i = 0; i < 3; ++i) {
int blocks, capacity;
fin >> blocks >> capacity;
vector<int> vec(blocks);
for (auto &elem : vec) {
fin >> elem;
}
auto res = Solve(vec, capacity);
fout << res << "\n";
}
return 0;
}