Cod sursa(job #1064791)

Utilizator roxannemafteiuMafteiu-Scai Roxana roxannemafteiu Data 22 decembrie 2013 13:10:10
Problema Zebughil Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <stdio.h>
#include <string.h>
FILE *in,*out;
#define MAX (1<<19)
using namespace std;
int maxim(int x, int y) {return x > y ? x : y;}
int n, c[MAX][20], G, v[20], max;
int main()
{
    in=fopen("zebughil.in","rt");
    out=fopen("zebughil.out","wt");
    int i, j, k;
    for (int t = 1; t <= 3; t++)
    {
        fscanf(in,"%d %d",&n,&G);
        for (i = 0; i < n; i++)
            fscanf(in,"%d",v + i);
        max = (1<<n) - 1;
        for (i = 0; i <= max; i++)
            for (j = 0; j <= n; j++)
                c[i][j] = -1;
        c[0][0] = 0;
        for (i = 0; i <= max; i++)
            for (j = 0; j < n; j++)
                if (c[i][j] != -1)
                    for (k = 0; k < n; k++)
                        if ((i & (1 << k)) == 0)
                        {
                            if (c[i][j] >= v[k])
                            {
                                if (c[i + (1<<k)][j]) c[i + (1<<k)][j] = c[i][j] - v[k];
                                else c[i + (1<<k)][j] = maxim(c[i + (1<<k)][j],c[i][j] - v[k]);
                            }
                            else c[i + (1<<k)][j + 1] = G - v[k];
                        }

        for (i = 0; i <= n; i++) if (c[max][i] != -1) break;
        fprintf(out,"%d\n",i);
    }
    fclose(in);
    fclose(out);
    return 0;
}