Pagini recente » Cod sursa (job #214085) | Cod sursa (job #1837758) | Cod sursa (job #2742963) | Cod sursa (job #2480448) | Cod sursa (job #2283262)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int main()
{
ifstream in("zebughil.in");
ofstream out("zebughil.out");
int t = 3;
while(t--)
{
int n, g;
in >> n >> g;
vector<long long> v(n);
for(int i = 0; i < n; ++i)
in >> v[i];
vector<long long> dp(1 << n);
for(int state = 0; state < (1 << n); ++state)
{
long long sum = 0;
for(int i = 0; i < n; ++i)
if((state & (1 << i)) != 0)
sum += v[i];
if(sum <= g)
dp[state] = 1;
else
{
dp[state] = (1LL << 62);
for(int sub = (state - 1) & state; sub > 0; sub = (sub - 1) & state)
dp[state] = min(dp[state], dp[sub] + dp[state - sub]);
}
}
out << dp[(1 << n) - 1] << "\n";
}
in.close();
out.close();
return 0;
}