Pagini recente » Cod sursa (job #3340334) | Cod sursa (job #3134980) | Profil Sergiu | Cod sursa (job #2200699) | Cod sursa (job #3330372)
#include <iostream>
#include <fstream>
#include <vector>
#define ll long long
// #define fin cin
// #define gout cout
using namespace std;
ifstream fin("cowfood.in");
ofstream gout("cowfood.out");
const int MOD=3210121,smax=10001;
int k,s,n,v,e;
int m[21][31],x[21],maxi[21][31],scomb[smax];
void calcul()
{
for(int i=0; i<=s; ++i)scomb[i]=1;
for(int i=1; i<=k; ++i)for(int j=1; j<=s; ++j)scomb[j]=(scomb[j]+scomb[j-1])%MOD;
}
void bck(int k)
{
for(int i=x[k-1]+1; i<=n; ++i)
{
int r=0;
for(int j=1; j<=::k; ++j)
{
maxi[k][j]=max(maxi[k-1][j],m[i][j]);
r+=maxi[k][j];
}
if(r<=s)
{
if(k%2)
{
e+=scomb[s-r];
if(e>=MOD)e-=MOD;
}
else
{
e-=scomb[s-r];
if(e<0)e+=MOD;
}
x[k]=i;
bck(1+k);
}
}
}
int main()
{
fin>>k>>s>>n;
for(int i=1; i<=n; ++i)for(int j=1; j<=k; ++j)fin>>m[i][j];
calcul();
bck(1);
v=scomb[s]-s*k-1-e;
v%=MOD;
if(v<0)v+=MOD;
gout<<v;
return 0;
}