Cod sursa(job #51120)

Utilizator cos_minBondane Cosmin cos_min Data 10 aprilie 2007 10:43:30
Problema Oite Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.34 kb
#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] );
}