Pagini recente » Cod sursa (job #2951051) | Cod sursa (job #1440243) | Cod sursa (job #2331588) | Cod sursa (job #1502286) | Cod sursa (job #1847362)
#include <cstdio>
#include <algorithm>
#define BIT(x) (1<<(x))
#define MOD 3210121
using namespace std;
typedef long long llong;
int mat[21][31];
int c[31][10001];
int getNum(int s, int n)
{
if(c[n][s] != 0) return c[n][s];
if(n == 2)
{
c[n][s] = 1LL * s * (s + 1) / 2;
return c[n][s];
}
for(int i = 1; i <= n; i++)
{
if(s - i <= 0)
break;
c[n][s] = (c[n][s] + getNum(s - i, n - i)) % MOD;
}
return c[n][s];
}
int main()
{
freopen("cowfood.in", "r", stdin);
freopen("cowfood.out", "w", stdout);
llong rc, rez = 0;
int s, n, k, i, j, p, v[31], nb, sc;
scanf("%d%d%d", &k, &s, &n);
for(i = 0; i < n; i++)
for(j = 0; j < k; j++)
scanf("%d", &mat[i][j]);
for(i = 1; i < BIT(n); i++)
{
nb = 0;
sc = 0;
for(p = 0; p < k; p++)
v[p] = 0;
for(j = 0; j < n; j++)
{
if(i & BIT(j))
{
nb++;
for(p = 0; p < k; p++)
{
v[p] = max(v[p], mat[j][p]);
}
}
}
for(p = 0; p < k; p++)
{
sc += v[p];
}
rc = getNum(s - sc + 1, k);
if(nb & 1) rez = (rez + rc) % MOD;
else
{
if(rez - rc < 0) rez += MOD;
rez = (rez - rc) % MOD;
}
}
rez = (getNum(s - 1, k) - rez) % MOD;
printf("%lld", rez);
return 0;
}