Cod sursa(job #141205)

Utilizator yonutzTalos Ionut yonutz Data 22 februarie 2008 20:49:40
Problema Cowfood Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.01 kb
#include <stdio.h>      
#define KMAX 32      
#define NMAX 22      
#define SMAX 10100      
#define MAX(a,b) ((a)>(b)?(a):(b))      
#define MIN(a,b) ((a)<(b)?(a):(b))      
#define MOD 3210121      
#define mod(a) (((a) >= MOD) ? ((a)-MOD):(a))      
     
int A[SMAX][NMAX], S, N, K, Sol, IT, Sum[SMAX][NMAX];      
int E[NMAX][KMAX], v[NMAX][KMAX];      
     
void solve(int nv, int sgn, int num)      
{      
        int i, j, sum;      
     
        for (i = nv; i <= N; i++)      
        {      
                sum = 0;      
                for (j = 1; j <= K; j++)      
                    v[num+1][j] = MAX(v[num][j], E[i][j]), sum += v[num+1][j];      
     
                if (S-sum >= 0)      
                {      
                      Sol = mod(Sol + Sum[S-sum][K] * sgn + MOD);      
                      while (Sol >= MOD) Sol = mod(Sol);      
                }      
                IT++;      
                solve(i+1, -1*sgn, num+1);      
        }      
}      
     
int main()      
{      
        int i, j, k;      
     
        freopen("cowfood.in", "r", stdin);      
        scanf("%d %d %d", &K, &S, &N);      
     
        A[0][0] = Sum[0][0] = 1;      
     
    for (i = 1; i <= S; i++)      
        Sum[i][0] = 1;      
     
    for (j = 1; j <= K; j++)      
    {      
        A[0][j] = Sum[0][j] = 1;      
     
        for (i = 1; i <= S; i++)      
            A[i][j] = Sum[i][j - 1],      
            Sum[i][j] = (Sum[i - 1][j] + A[i][j]) % MOD;      
    }      
     
        for (i = 1; i <= N; i++)      
            for (j = 1; j <= K; j++) scanf("%d", E[i]+j);      
     
    Sol = 0;      
    for (i = 2; i <= S; i++)      
        {      
        Sol = mod(Sol + A[i][K] - K + MOD);      
                while (Sol >= MOD) Sol = mod(Sol);      
        }      
        solve(1,-1,0);      
        freopen("cowfood.out", "w", stdout);      
        printf("%d\n", Sol);      
     
        return 0;      
}