Pagini recente » Cod sursa (job #2252935) | Cod sursa (job #1973323) | Cod sursa (job #826900) | Cod sursa (job #679384) | Cod sursa (job #1975501)
#include <bits/stdc++.h>
using namespace std;
//Constants
const long long INF = std::numeric_limits<long long>::max();
const long long MOD = 3210121;
const long double PI = 3.141592653589793;
//MACROS
#define pb push_back
#define rep(i, begin, end) for (__typeof(end) i = (begin) - ((begin) > (end)); i != (end) - ((begin) > (end)); i += 1 - 2 * ((begin) > (end)))
typedef long long LL;
typedef pair <int,int> PII;
int n, s, k, a[33][33], cur[33];
LL dp[11111], ans;
void brute(int lvl, int mask) {
if (lvl == n + 1) {
int ss = 0;
rep(i,1,k+1) ss += cur[i];
if (ss > s) return;
if (__builtin_popcount(mask)&1) ans = (ans - dp[s-ss] + MOD) % MOD;
else ans = (ans + dp[s-ss]) % MOD;
} else {
brute(lvl+1,mask);
int prev[33];
rep(i,1,k+1) prev[i] = cur[i], cur[i] = max(cur[i],a[lvl][i]);
brute(lvl+1,mask|(1<<(lvl-1)));
rep(i,1,k+1) cur[i] = prev[i];
}
}
int main() {
freopen("cowfood.in","r",stdin);
freopen("cowfood.out","w",stdout);
cin >> k >> s >> n;
rep(i,1,n+1) rep(j,1,k+1) cin >> a[i][j];
rep(i,0,s+1) dp[i] = 1;
rep(i,1,k+1) rep(j,1,s+1) dp[j] = (dp[j] + dp[j-1]) % MOD;
brute(1,0);
cout << (ans - s*k - 1 + MOD) % MOD;
}