Pagini recente » Cod sursa (job #2253328) | Cod sursa (job #1313821) | Cod sursa (job #520303) | Cod sursa (job #1228573) | Cod sursa (job #1598630)
#include <bits/stdc++.h>
using namespace std;
const int mod = 3210121;
int k , s , n , i , j , sc , mask;
int a[29][39] , curr[39];
long long result;
long long d[39][20009] , w[20009];
void runw()
{
int i , j;
for (i = 0 ; i <= s ; ++i)
d[1][i] = 1;
for (i = 2 ; i <= k + 1 ; ++i)
{
d[i][0] = 1;
for (j = 1 ; j <= s ; ++j)
d[i][j] = (d[i][j - 1] + d[i - 1][j]) % mod;
}
}
void bkt(int stp , int sc , int nb)
{
int tmp[39];
if (stp == n)
{
if (0 <= sc)
{
if (nb & 1) result = (result - d[k + 1][sc] + mod) % mod;
else result = (result + d[k + 1][sc]) % mod;
}
return ;
}
for (i = 0 ; i < k ; ++i)
tmp[i] = curr[i];
sc = s;
for (i = 0 ; i < k ; ++i)
{
curr[i] = max(curr[i] , a[stp][i]);
sc -= curr[i];
}
bkt(stp + 1 , sc , nb + 1);
sc = s;
for (i = 0 ; i < k ; ++i)
{
curr[i] = tmp[i];
sc -= curr[i];
}
bkt(stp + 1 , sc , nb);
}
int main()
{
freopen("cowfood.in" , "r" , stdin);
freopen("cowfood.out" , "w" , stdout);
scanf("%d%d%d" , &k , &s , &n);
for (i = 0 ; i < n ; ++i)
for (j = 0 ; j < k ; ++j)
scanf("%d" , &a[i][j]);
runw();
bkt(0 , s , 0);
if (k > 1)
result = (result - s * k - 1 + mod) % mod;
printf("%lld\n" , result);
return 0;
}