Pagini recente » Cod sursa (job #715114) | Cod sursa (job #40601) | Cod sursa (job #377286) | Cod sursa (job #2544168) | Cod sursa (job #51120)
Cod sursa(job #51120)
#include <stdio.h>
#include <fstream>
using namespace std;
#define in "oite.in"
#define out "oite.out"
#define dim 1000001
int A[4][dim];
int B[4][dim];
int N, L;
int C[1025];
int main()
{
int max;
freopen(in,"r",stdin);
freopen(out,"w",stdout);
scanf("%d%d", &N, &L);
for ( int i = 1; i <= N; i++ )
scanf("%d", &C[i]);
A[0][C[1]] = 1;
for ( int i = 2; i <= N; i++ )
{
if ( i == 2 ) max = 0;
else if ( i == 3 ) max = 1;
else if ( i > 3 ) max = 2;
for ( int j = 0; j <= max; j++ )
{
for ( int k = 0; k <= L+C[i]; k++ )
{
if ( A[j][k] != 0 )
{
// if ( k + C[i] == L ) printf("%d \n", C[i]);
B[j+1][k+C[i]] = A[j+1][k+C[i]] + A[j][k];
}
}
}
for ( int j = 0; j <= 3; j++ )
{
for ( int k = 0; k <= L; k++ )
{
if ( B[j][k] != 0 ) A[j][k] = B[j][k];
}
}
A[0][C[i]] += 1;
}
/* for ( int i = 0; i <= 3; i++, printf("\n") )
{
for ( int j = 0; j <= L; j++ )
printf("%d ", A[i][j]);
} */
printf("%d", A[3][L] );
}