Cod sursa(job #1952340)

Utilizator badea_adi1999Badea Adrian Catalin badea_adi1999 Data 4 aprilie 2017 02:26:55
Problema Cowfood Scor 100
Compilator cpp Status done
Runda Lista lui wefgef Marime 1.13 kb
#include <fstream>
#define nmax 35
#define smax 10005
#define mod 3210121
using namespace std;
ifstream f("cowfood.in");
ofstream g("cowfood.out");
int n,k,s,d[nmax][smax],sol;
int t[nmax],a[nmax],v[nmax][nmax];

void bkt(int p,int b)
{
    int i,j,m;
    if(p==n+1) {
        m=0;
        for(i=1;i<=k;++i)
            m+=t[i];
        if(m<=s) {
            j=d[k][s-m];
            if(b&1)
                j=-j;
            sol=(sol+j+mod)%mod;
        }
    }
    else {
        bkt(p+1,b);
        int w[nmax]={0};
        for(i=1;i<=k;++i) {
            w[i]=t[i];
            t[i]=max(t[i],v[p][i]);
        }
        bkt(p+1,b+1);
        for(i=1;i<=k;++i)
            t[i]=w[i];
    }
}
int main()
{
    int i,j;
    f>>k>>s>>n;
    for(i=1;i<=n;i++)
        for(j=1;j<=k;j++)
            f>>v[i][j];
    for(i=0;i<=s;i++)
        d[0][i]=1;
    for(i=1;i<=k;i++) {
        d[i][0]=1;
        for(j=1;j<=s;j++) {
            d[i][j]=d[i-1][j]+d[i][j-1];
            if(d[i][j]>=mod)
                d[i][j]-=mod;
        }
    }
    bkt(1,0);
    g<<(sol-1-1LL*s*k%mod+mod)%mod;
    return 0;
}