Cod sursa(job #847465)

Utilizator visanrVisan Radu visanr Data 3 ianuarie 2013 22:30:33
Problema Cowfood Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std;

#define Modulo 3210121

int N, K, S;
int Dp[35][10010], A[25][35], V[35];
int Ans, i, j;

void DoPinex(int Pos, int Sign, int V[])
{
    if(Pos == N)
    {
        int CrtSum = S, i;
        for(i = 0; i < K; i++) CrtSum -= V[i];
        if(CrtSum >= 0) Ans = (Ans + Sign * Dp[K][CrtSum] + Modulo) % Modulo;
        return ;
    }
    DoPinex(Pos + 1, Sign, V);
    int NewV[35], i;
    for(i = 0; i < K; i++) NewV[i] = max(V[i], A[Pos][i]);
    DoPinex(Pos + 1, -Sign, NewV);
}

int main()
{
    freopen("cowfood.in", "r", stdin);
    freopen("cowfood.out", "w", stdout);
    scanf("%i %i %i", &K, &S, &N);
    for(i = 0; i < N; i++)
        for(j = 0; j < K; j++)
            scanf("%i", &A[i][j]);
    for(i = 0; i <= S; i++) Dp[0][i] = 1;
    for(i = 1; i <= K; i++)
        for(j = 0; j <= S; j++)
            Dp[i][j] = (Dp[i - 1][j] + Dp[i][j - 1]) % Modulo;
    Ans = (Modulo - S * K - 1) % Modulo;
    DoPinex(0, 1, V);
    printf("%i\n", Ans % Modulo);
    return 0;
}