Cod sursa(job #2063820)

Utilizator alex2kamebossPuscasu Alexandru alex2kameboss Data 11 noiembrie 2017 15:17:26
Problema Cowfood Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <iostream>
#include <cstdio>
#define MOD 3210121
using namespace std;
int n,k,s;
int a[25][35], dp[35][10005], m[35], a1[25][35];
int sol;
void pricipiulise(int p, int semn)
{
    if(p==n+1)
    {
        int l=0;
        for(int i=1;i<=k;i++)
            l+=m[i];
        if(l<=s)
            sol=(sol+MOD+semn*dp[k][s-l])%MOD;
        return ;
    }
    pricipiulise(p+1,semn);
    for(int i=1;i<=k;i++)
    {
        a1[p][i]=m[i];
        m[i]=max(m[i],a[p][i]);
    }
    pricipiulise(p+1,-semn);
    for(int i=1;i<=k;i++)
        m[i]=a1[p][i];
}
int main()
{
    freopen("cowfood.in","r",stdin);
    freopen("cowfood.out","w",stdout);
    scanf("%d %d %d", &k,&s,&n);
    for(int i=1;i<=n;i++)
    {
        scanf("\n%d", &a[i][1]);
        for(int j=2;j<=k;j++)
        {
            scanf(" %d", &a[i][j]);
        }
    }
    for(int i=0;i<=s;i++)
        dp[0][i]=1;
    for(int i=1;i<=k;i++)
    {
        dp[i][0]=1;
        for(int j=1;j<=s;j++)
        {
            dp[i][j]=dp[i-1][j]+dp[i][j-1];
            dp[i][j]%=MOD;
        }
    }
    pricipiulise(1,1);
    sol=(sol-s*k-1+MOD)%MOD;
    cout<<sol;
    return 0;
}