Cod sursa(job #2030360)

Utilizator refugiatBoni Daniel Stefan refugiat Data 1 octombrie 2017 15:19:54
Problema Cowfood Scor 28
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <iostream>
#include <fstream>
#define MOD 3210121
using namespace std;
ifstream si("cowfood.in");
ofstream so("cowfood.out");
int n,k,s,sol,v[32],a[32],dp[32][10005],mat[22][32];
void backt(int x,int bit)
{
    if(x==n+1)
    {
        int s1=0;
        for(int i=1;i<=k;++i)
            s1+=v[i];
        if(s1<=s)
        {
            int m=dp[k][s-s1];
            if(bit&1)
                m=-m;
            sol=(sol+m+MOD)%MOD;
        }
    }
    else
    {
        backt(x+1,bit);
        for(int i=1;i<=k;++i)
            a[i]=v[i],v[i]=max(v[i],mat[x][i]);
        backt(x+1,bit+1);
        for(int i=1;i<=k;++i)
            v[i]=a[i];
    }
}
int main()
{
    si>>k>>s>>n;
    for(int i=1;i<=n;++i)
        for(int j=1;j<=k;++j)
            si>>mat[i][j];
    for(int i=0;i<=s;++i)
        dp[0][i]=1;
    for(int i=1;i<=k;++i)
        for(int j=dp[i][0]=1;j<=s;++j)
            dp[i][j]=(dp[i-1][j]+dp[i][j-1])%MOD;
    backt(1,0);
    so<<(sol-1-s*k+MOD)%MOD;
    return 0;
}