Cod sursa(job #884225)

Utilizator okros_alexandruOkros Alexandru okros_alexandru Data 20 februarie 2013 19:44:47
Problema Cowfood Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <fstream>
#define nmax 22
#define kmax 32
#define smax 10100
#define mod 3210121
using namespace std;

int N,K,S,Answer,A[nmax][kmax],DP[kmax][smax],B[kmax];

void solve(int Config,int Semn,int B[]) {

    int i,j,Sum;

    for(i=1,Sum=0;i<=K;i++)
        Sum+=B[i];

    if(Sum<=S)
        Answer=(Answer+mod+Semn*(DP[S-Sum+1][K]+1))%mod;

    for(i=0;i<N;i++)
        if((Config&(1<<i))==0) {

            int C[kmax];

            for(j=1;j<=K;j++)
                C[j]=max(B[j],A[i+1][j]);

            solve(Config|(1<<i),-Semn,C);

            }

}
void solve() {

    int i,j;

    Answer=S*K-1;

    for(i=1;i<=S;i++)
        DP[1][i]=1;

    for(i=2;i<=K;i++)
        for(j=1;j<=S;j++)
            DP[i][j]=(DP[i-1][j]+DP[i][j-1])%mod;

    solve(0,1,B);

}
void read() {

    int i,j;
    ifstream in("cowfood.in");
    in>>K>>S>>N;

    for(i=1;i<=N;i++)
        for(j=1;j<=K;j++)
            in>>A[i][j];

    in.close();

}
void write() {

    ofstream out("cowfood.out");
    out<<Answer<<'\n';
    out.close();

}
int main() {

    read();
    solve();
    write();

    return 0;

}