Pagini recente » Cod sursa (job #1999165) | Cod sursa (job #2383390) | Cod sursa (job #3172883) | Cod sursa (job #2836217) | Cod sursa (job #43170)
Cod sursa(job #43170)
#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;
}