Cod sursa(job #43169)

Utilizator cos_minBondane Cosmin cos_min Data 29 martie 2007 21:11:58
Problema Zebughil Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.57 kb
#include <stdio.h>
#include <fstream>
using namespace std;

#define in "zebughil.in"
#define out "zebughil.out"
#define dim 18
#define infinit 1000001

int N, T;
int x[dim], A[dim];
int minim=1<<20;

void ReadData();
void Back(int);
int Ok(int);
int Drum();

int main()
{
    ReadData();
    
    return 0;
}

void ReadData()
{
     freopen(in,"r",stdin);
     freopen(out,"w",stdout);
     
     for ( int i = 1; i <= 3; i++ )
     {
         minim = infinit;
         scanf("%d%d", &N, &T);
         for ( int j = 1; j <= N; j++ )
             scanf("%d", &A[j]);
         
         x[0] = 0;
         Back(1);
         
         printf("%d\n",minim);
     }
}

void Back(int k)
{
     for ( int i = 1; i <= N; i++ )
     {
         x[k] = i;
         
         if ( Ok(k) )
         {
              if ( k == N ) 
              {
                   if ( minim > Drum() ) 
                   {
                        minim = Drum();
                   }
                   
                  /* for ( int j = 1; j <= k; j++ )
                       printf("%d ", x[j]);
                   
                   printf("\n");*/
              }
              else if ( k < N ) Back(k+1);
         }
     }
}

int Drum()
{
    int s=0;
    int transport = 1;
    
    for ( int i = 1; i <= N; i++ )
    {
        s += A[x[i]];
        if ( s > T ) s = A[x[i]], transport += 1;
    }
    
    return transport;
}

int Ok(int k)
{
    for ( int i = 1; i < k; i++ )
        if ( x[i] == x[k] ) return 0;
    return 1;
}