Cod sursa(job #884256)

Utilizator okros_alexandruOkros Alexandru okros_alexandru Data 20 februarie 2013 20:11:55
Problema Cowfood Scor 100
Compilator cpp Status done
Runda Lista lui wefgef Marime 1.17 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 k,int Semn,int B[]) {

    int i,j,Sum;

    if(k==N) {

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

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

        }
    else {

        solve(k+1,Semn,B);

        int C[kmax];

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

        solve(k+1,-Semn,C);

    }

}
void solve() {

    int i,j;

    Answer=(mod-S*K-1)%mod;

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

    for(i=2;i<=K+1;i++)
        for(j=1;j<=S+1;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;

}