Cod sursa(job #3257923)

Utilizator SerbanCaroleSerban Carole SerbanCarole Data 19 noiembrie 2024 22:38:25
Problema Zebughil Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.98 kb
#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;
}