Cod sursa(job #1766577)

Utilizator Vlad_317Vlad Panait Vlad_317 Data 28 septembrie 2016 09:11:56
Problema Zebughil Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <stdio.h>

using namespace std;

const int MAX = 18;

int v[MAX];
int dp[MAX][1 << MAX];

int max(int a, int b)
{
    if(a > b)
        return a;
    return b;
}

int main()
{
    FILE *fin, *fout;

    fin = fopen("zebughil.in", "r");
    fout = fopen("zebughil.out", "w");

    for(int test = 1; test <= 3; test++)
    {
        int n, g;
        fscanf(fin, "%d%d", &n, &g);
        for(int i = 0; i < n; i++)
            fscanf(fin, "%d", &v[i]);
        for(int i = 0; i <= n; i++)
            for(int j = 1; j < (1 << n); j++)
                dp[i][j] = -1;
        for(int k = 1; k <= n; k++)
            for(int i = 1; i < (1 << n); i++)
                for(int j = 0; j < n; j++)
                    if(i & (1 << j))
                        if(dp[k - 1][i ^ (1 << j)] != -1)
                            dp[k][i] = max(dp[k][i], g - v[j]);
                        else
                            if(dp[k][i ^ (1 << j)] >= v[j])
                                dp[k][i] = max(dp[k][i], dp[k][i ^ (1 << j)] - v[j]);
        int j = 1;
        int i = (1 << n) - 1;
        while(dp[j][i] == -1)
            j++;
        fprintf(fout, "%d\n", j);
    }

    return 0;
}