Pagini recente » Cod sursa (job #3288353) | Cod sursa (job #1465491) | Cod sursa (job #2853436) | Cod sursa (job #2867384) | Cod sursa (job #3257923)
#include <fstream>
using namespace std;
ifstream cin("zebughil.in");
ofstream cout("zebughil.out");
using pii = pair<int,int>;
int n , g , oo = 363256450 , v[17];
pii dp[1<<17];
pii mrg(pii f, pii s){
if(f.first == s.first){
if(f.second < s.second) return f;
return s;
}
if(f.first < s.first) return f;
return s;
}
signed main()
{
while(cin >> n){
cin >> g , dp[0] = {0,0};
for(int i = 0 ; i < n ; ++i) cin >> v[i];
for(int i = 1 ; i < (1<<n) ; ++i) dp[i] = {oo,oo};
for(int i = 0 ; i < (1<<n) ; ++i){
for(int j = 0 ; j < n ; ++j){
if(i&(1<<j)) continue;
pii dl = dp[i];
if(g - dl.second >= v[j]) dl.second += v[j];
else dl.first++ , dl.second = v[j];
dp[i + (1<<j)] = mrg(dp[i + (1<<j)] , dl);
}
}
cout << dp[(1<<n)-1].first + (dp[(1<<n)-1].second > 0) << '\n';
}
return 0;
}