Cod sursa(job #3193541)

Utilizator xDemonstyMatei Haba Ionut xDemonsty Data 14 ianuarie 2024 20:40:56
Problema Zebughil Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <fstream>
using namespace std;
ifstream cin("zebughil.in");
ofstream cout("zebughil.out");
long long n, v[18];
struct zebughil
{
    int minim, val ;
} dp[1<<17];
void solve()
{
    long long n,g;
    cin >> n >> g ;
    for ( int i = 1; i <= n ; i ++ )
        cin >> v[i];

    for( int i = 1 ; i < ( 1 << n ) ; i ++ )
    {
        dp[i] = {n + 2,0} ;

        for (int j = 1; j <= n ; j ++ )
        {
            if ( i & ( 1 << ( j -1)) )
            {
                int val1 = dp[i^(1<<(j-1))] . minim;
                int val2 = dp[i^(1<<(j-1))] .val;


                if ( v[j] + val2 > g  )
                {
                    val1 ++ ;
                    val2 = v[j];
                }
                else
                    val2 += v[j];

                if ( dp[i].minim > val1)
                {
                    dp[i].minim = val1;
                    dp[i].val = val2 ;
                }
                else if (dp[i].minim == val1)
                    dp[i] .val = min (dp[i].val,val2);

            }
        }
    }

    cout << dp[(1<<n) -1 ].minim + 1<< '\n';
}
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int test = 3;
    while ( test -- )
        solve();
    return 0;
}