Cod sursa(job #3310837)

Utilizator Tibi201eweREWR Tibi201 Data 17 septembrie 2025 11:03:24
Problema Zebughil Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <stdio.h>
#define MAXN 17

int v[MAXN];
int min[1024*128][2]; // [0] = nr camione; [1] = g ramas

int main()
{
    FILE *fin, *fout;
    int n,g,i,t,mask,next,aux1,aux2;
    fin=fopen("zebughil.in", "r");
    fout=fopen("zebughil.out", "w");
    for(mask=1; mask<(1<<17); mask++)
      min[mask][0]=20;
    for(t=0; t<3; t++){
      fscanf(fin, "%d%d", &n, &g);
      for(i=0; i<n; i++)
        fscanf(fin, "%d", &v[i]);
      min[0][0]=0;
      for(mask=0; mask<(1<<n)-1; mask++){
        for(i=0; i<n; i++){
          next=(mask|(1<<i));
          if(next!=mask){
            if(v[i]<=min[mask][1]){
              aux1=min[mask][0];
              aux2=min[mask][1]-v[i];
            }else{
              aux1=min[mask][0]+1;
              aux2=g-v[i];
            }
            if(aux1<min[next][0]||(aux1==min[next][0]&&aux2>min[next][1])){
              min[next][0]=aux1;
              min[next][1]=aux2;
            }
          }
        }
        min[mask][0]=20;
        min[mask][1]=0;
      }
      fprintf(fout, "%d\n", min[(1<<n)-1][0]);
      min[(1<<n)-1][0]=20;
      min[(1<<n)-1][1]=0;
    }
    fclose(fin);
    fclose(fout);
    return 0;
}