Cod sursa(job #2589362)

Utilizator Anakin1001George Giorgiu Gica Anakin1001 Data 26 martie 2020 11:12:11
Problema Zebughil Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <fstream>

using namespace std;

ifstream f ( "zebughil.in" );
ofstream g ( "zebughil.out" );

const int inf = 20;
const int N = ( 1 << 17 );
int dp[2][N], v[17];

int main()
{   int n, G, i;
    for ( int test = 1; test <= 3; test++ ){
        f >> n >> G;
        for ( i = 1; i <= n; i++ )
            f >> v[i];
        int Max = ( 1 << n ) - 1;
        dp[0][0] = 1;
        dp[1][0] = 0;
        for ( i = 1; i <= Max; i++ ){
            dp[0][i] = inf;
            dp[1][i] = 0;
        }
        for ( int stare = 1; stare <= Max; stare++ ){
            for ( int j = 0; ( 1 << j ) <= i; j++ ){
                if ( ( stare >> j ) & 1 == 1 ){
                    int new_stare = stare - ( 1 << j );
                    int t = 1, gr = v[j + 1];
                    if ( v[j + 1] + dp[1][new_stare] <= G ){
                        t = 0;
                        gr = dp[1][new_stare] + v[j + 1];
                    }
                    if ( dp[0][stare] > dp[0][new_stare] + t ){
                        dp[0][stare] = dp[0][new_stare] + t;
                        dp[1][stare] = gr;
                    }
                    else if ( dp[0][stare] == dp[0][new_stare] + t )
                        dp[1][stare] = min ( dp[1][stare], gr );
                }
            }
        }
        g << dp[0][Max] << '\n';
    }
    return 0;
}