Cod sursa(job #3264226)

Utilizator paull122Paul Ion paull122 Data 19 decembrie 2024 13:48:15
Problema Zebughil Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <bits/stdc++.h>

#define VMAX 1000000
#define NMAX 17
#define LOG 20

#define INF (long long)(1e9)
#define MOD 1000000007
#define BASE 23

#define BLOCK_SIZE 230
#define ll long long int
#define EPS 0.02

using namespace std;
ifstream fin("zebughil.in");
ofstream fout("zebughil.out");

pair<int,ll> dp[1<<NMAX+1];
int a[NMAX+1];
int main()
{
    int T;
    T=3;
    while(T--)
    {
        int n,g;
        fin >> n >> g;
        for(int i=1;i<=n;i++)
        {
            fin >> a[i];
        }
        for(int i=0;i<(1<<n);i++)
        {
            dp[i]={INF,INF};
        }
        dp[0] = {1,0};
        for(int mask=1;mask < (1<<n);mask++)
        {
            for(int i=0;i<n;i++)
            {
                if(mask & (1<<i))
                {
                    pair<int,int> nxt;
                    nxt.first = dp[mask ^ (1<<i)].first + (dp[mask ^ (1<<i)].second + a[i+1] > g);
                    nxt.second = (dp[mask ^ (1<<i)].second + a[i+1] > g) ? a[i+1] : dp[mask ^ (1<<i)].second + a[i+1];
                    if(nxt.first < dp[mask].first || (nxt.first == dp[mask].first && nxt.second < dp[mask].second))
                    {
                        dp[mask] = nxt;
                    }
                }
            }
        }
        fout << dp[(1<<n)-1].first << '\n';
    }
}