Cod sursa(job #1560292)

Utilizator hrazvanHarsan Razvan hrazvan Data 2 ianuarie 2016 13:43:25
Problema Zebughil Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <stdio.h>
#define MAXN 17
#define INF 2000000000
int v[MAXN], room[(1 << MAXN)], cam[(1 << MAXN)];

int main(){
  FILE *in = fopen("zebughil.in", "r");
  FILE *out = fopen("zebughil.out", "w");
  int n, g, i, j, t, nr, nc;
  t = 3;
  for(; t > 0; t--){
    fscanf(in, "%d%d", &n, &g);
    for(i = 0; i < n; i++)
      fscanf(in, "%d", &v[i]);
    room[0] = cam[0] = 0;
    for(i = 1; i < (1 << n); i++){
      room[i] = 0;
      cam[i] = INF;
      for(j = 0; j < n; j++){
        if(i & (1 << j)){
          nc = cam[i ^ (1 << j)];
          if(room[i ^ (1 << j)] < v[j]){
            nc++;
            nr = g - v[j];
          }
          else
            nr = room[i ^ (1 << j)] - v[j];
          if(nc < cam[i] || (nc == cam[i] && room[i] < nr)){
            room[i] = nr;
            cam[i] = nc;
          }
        }
      }
    }
    fprintf(out, "%d\n", cam[(1 << n) - 1]);
  }
  fclose(out);
  return 0;
}