Cod sursa(job #51769)

Utilizator raula_sanChis Raoul raula_san Data 16 aprilie 2007 19:59:03
Problema Oite Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.47 kb
#include <stdio.h>

int C;

#define dim 4000000
long L, T1[dim], T2[dim], T3[dim], T4[dim];

void get_data_solve();
void print();

int main()
{
    get_data_solve();
    print();
    
    return 0;
}

#define greater(a, b) (a) > (b) ? (a) : (b)

void get_data_solve()
{
     freopen("oite.in", "r", stdin);
     
     scanf("%d %ld", &C, &L);
     
     long i, j, value, max = 0, limit;
	 for(i=1; i<=C; ++i)
     {
              scanf("%ld", &value);
              limit = max;
              
              for(j=limit; j>=0; --j)
                         if(j+value <= L)
                         {
                                    T4[j+value] += T3[j];
                                    max = greater(max, j+value);
                         }
              for(j=limit; j>=0; --j)
                         if(j+value <= L)
                         {
                                    T3[j+value] += T2[j];
                                    max = greater(max, j+value);
                         }
              for(j=limit; j>=0; --j)
                         if(j+value <= L)
                         {
                                    T2[j+value] += T1[j];
                                    max = greater(max, j+value);
                         }
              ++ T1[value];
     }
     
     fclose(stdin);
}

void print()
{
     freopen("oite.out", "w", stdout);
     
     printf("%ld", T4[L]);
     
     fclose(stdout);
}