Cod sursa(job #1952334)

Utilizator badea_adi1999Badea Adrian Catalin badea_adi1999 Data 4 aprilie 2017 01:59:00
Problema Cowfood Scor 18
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <fstream>
#define nmax 25
#define kmax 35
#define smax 10005
#define mod 3210121
using namespace std;
ifstream f("cowfood.in");
ofstream g("cowfood.out");
int k,s,n,v[nmax][kmax];
int sol,q[kmax][smax];

void gen(int p,int a[],int t)
{
    int i;
    if (p<=n) {
        int b[kmax]={0};
        for (i=1;i<=k;i++)
            b[i]=a[i];
        gen(p+1,b,t);
        for (i=1;i<=k;i++)
            a[i]=max(a[i],v[p][i]);
        gen(p+1,a,t+1);
        return;
    }
    if (!t)
        return;
    int u=0;
    for (i=1;i<=k;i++)
        u+=a[i];
    if (u>s)
        return;

    if (t&1)
        i=-1;
    else
        i=1;
    sol+=1LL*i*q[k][s-u]%mod;
    sol=(sol+mod)%mod;
}
int main()
{
    int i,j,a[kmax]={0};
    f>>k>>s>>n;
    for(i=0;i<=s;i++)
        q[0][i]=1;
    for(i=1;i<=k;i++)
        for(j=q[i][0]=1;j<=s;j++) {
            q[i][j]=q[i-1][j]+q[i][j-1];
            if (q[i][j]>=mod)
                q[i][j]-=mod;
        }
    sol=q[k][s-k];
    for (i=1;i<=n;i++)
        for (j=1;j<=k;j++)
            f>>v[i][j];
    gen(1,a,0);
    g<<sol<<'\n';
    return 0;
}