Pagini recente » Cod sursa (job #697093) | Cod sursa (job #2982772) | Cod sursa (job #598005) | Cod sursa (job #2378422) | Cod sursa (job #1975503)
#include <bits/stdc++.h>
using namespace std;
const long long MOD = 3210121;
int n, s, k, a[33][33], cur[33];
long long dp[11111], ans;
void brute(int lvl, int mask) {
if (lvl == n + 1) {
int ss = 0;
for (int i = 1; i <= k; i++) ss += cur[i];
if (ss > s) return;
if (mask&1) ans = (ans - dp[s-ss] + MOD) % MOD;
else ans = (ans + dp[s-ss]) % MOD;
} else {
brute(lvl+1,mask);
int prev[33];
for (int i = 1; i <= k; i++) prev[i] = cur[i], cur[i] = max(cur[i],a[lvl][i]);
brute(lvl+1,mask+1);
for (int i = 1; i <= k; i++) cur[i] = prev[i];
}
}
int main() {
freopen("cowfood.in","r",stdin);
freopen("cowfood.out","w",stdout);
cin >> k >> s >> n;
for (int i = 1; i <= n; i++) for (int j = 1; j <= k; j++) cin >> a[i][j];
for (int i = 0; i <= s; i++) dp[i] = 1;
for (int i = 1; i <= k; i++) for (int j = 1; j <= s; j++) dp[j] = (dp[j] + dp[j-1]) % MOD;
brute(1,0);
cout << (ans - s*k - 1 + MOD) % MOD;
}