Pagini recente » Cod sursa (job #2762299) | Cod sursa (job #472239) | Cod sursa (job #2861993) | Cod sursa (job #2588723) | Cod sursa (job #1850903)
#include <cstdio>
#define MOD 3210121
#define max(x,y) (x>y?x:y)
#define min(x,y) (x<y?x:y)
using namespace std;
int a[21][31];
int comb[10100][32];
int n, mk, s;
int v[21];
int best[21][31];
int rezf = 0;
int sumaComb(int sf)
{
int rez = 0;
for(; sf >= mk - 1; sf--)
rez = (rez + comb[sf][mk - 1]) % MOD;
return rez;
}
void back()
{
int sum;
int k = 1;
v[k] = 0;
while(k > 0)
{
if(v[k] < n)
{
v[k]++;
sum = 0;
for(int i = 1; i <= mk; i++)
{
best[k][i] = max(best[k - 1][i], a[v[k]][i]);
sum += best[k][i];
}
if(s - sum >= 0)
{
/*if(k % 2 == 1)
rezf = (rezf + comb[s - sum + mk - 1][mk - 1]) % MOD;
else
{
rezf = (rezf - comb[s - sum + mk - 1][mk - 1]) % MOD;
while(rezf < 0) rezf += MOD;
}*/
if(k % 2 == 1)
rezf = (rezf + sumaComb(s - sum + mk - 1)) % MOD;
else
{
rezf = (rezf - sumaComb(s - sum + mk - 1)) % MOD;
while(rezf < 0) rezf += MOD;
}
}
k++;
v[k] = v[k - 1];
} else k--;
}
}
int main()
{
int i, j;
freopen("cowfood.in", "r", stdin);
freopen("cowfood.out", "w", stdout);
scanf("%d%d%d", &mk, &s, &n);
for(i = 0; i <= s + mk; i++)
{
comb[i][0] = 1;
for(j = 1; j <= min(i, mk + 1); j++)
{
comb[i][j] = (comb[i - 1][j] + comb[i - 1][j - 1]) % MOD;
}
}
for(i = 1; i <= n; i++)
{
for(j = 1; j <= mk; j++)
{
scanf("%d", &a[i][j]);
}
}
back();
rezf = (sumaComb(s - 1) - rezf) % MOD;
while(rezf < 0) rezf += MOD;
printf("%d", rezf);
return 0;
}