Cod sursa(job #1014915)

Utilizator poptibiPop Tiberiu poptibi Data 23 octombrie 2013 18:01:58
Problema Zebughil Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <cstdio>
#include <cstdlib>
#include <algorithm>
using namespace std;

int N, G, Dp[1 << 17][18], V[18];

int main()
{
    freopen("zebughil.in", "r", stdin);
    freopen("zebughil.out", "w", stdout);
    
    for(int T = 3; T; T --)
    {
        scanf("%i %i", &N, &G);
        
        for(int i = 0; i < (1 << N); ++ i)
            for(int j = 1; j <= N; ++ j)
                Dp[i][j] = -1;
        Dp[0][1] = G;
        
        for(int i = 0; i < N; ++ i)
            scanf("%i", &V[i]);
        
        for(int Conf = 0; Conf < (1 << N); ++ Conf)
            for(int i = 0; i < N; ++ i)
                if(!(Conf & (1 << i)))
                    for(int j = 1; j <= N; ++ j)
                    {
                        if(Dp[Conf][j] == -1) continue;
                        if(Dp[Conf][j] >= V[i])
                            Dp[Conf ^ (1 << i)][j] = max(Dp[Conf ^ (1 << i)][j], Dp[Conf][j] - V[i]);
                        else
                            Dp[Conf ^ (1 << i)][j + 1] = max(Dp[Conf ^ (1 << i)][j + 1], G - V[i]);
                    }
        
        for(int i = 1; i <= N; ++ i)  
            if(Dp[(1 << N) - 1][i] != -1)
            {
                printf("%i\n", i);
                break;
            }
    }
    
    return 0;
}