Cod sursa(job #1975503)

Utilizator KusikaPasa Corneliu Kusika Data 1 mai 2017 09:48:23
Problema Cowfood Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#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;
}