Pagini recente » Cod sursa (job #1005724) | Cod sursa (job #1818480) | Cod sursa (job #651052) | Cod sursa (job #1897698) | Cod sursa (job #1850891)
#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, k, s;
int v[21];
int best[21][31];
int rezf = 0;
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 <= k; 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 + k - 1][k - 1]) % MOD;
else
{
rezf = (rezf - comb[s - sum + k - 1][k - 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", &k, &s, &n);
for(i = 0; i <= s + k; i++)
{
comb[i][0] = 1;
for(j = 1; j <= min(i, k + 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 <= k; j++)
{
scanf("%d", &a[i][j]);
}
}
back();
rezf = comb[s - 1][k - 1] - rezf;
printf("%d", rezf);
return 0;
}