Pagini recente » Cod sursa (job #1491251) | Cod sursa (job #1090767) | Cod sursa (job #253141) | Cod sursa (job #2129274) | Cod sursa (job #2516616)
#include <fstream>
#include <vector>
using namespace std;
int ways = 0;
vector<vector<int>> eg;
int kg, sg, ng;
vector<int> solg;
vector<int> sumg;
ifstream in ("cowfood.in");
ofstream out ("cowfood.out");
void rec(int pos) {
if (pos == kg) {
bool good_all = sumg[kg-1] <= sg;
if (good_all) {
for (int i = 0; i < ng && good_all; ++i) {
bool good = false;
for (int j = 0; j < kg && !good; ++j)
if (solg[j] < eg[i][j]) good = true;
if (!good) good_all = false;
}
if (good_all) ways++;
}
return;
}
if (pos) {
for (int i = 1; i <= sg - sumg[pos-1] - (kg-pos-1); ++i) {
solg[pos] = i;
sumg[pos] = sumg[pos-1] + i;
rec(pos+1);
}
} else {
for (int i = 1; i <= sg - (kg-1); ++i) {
solg[0] = i;
sumg[0] = i;
rec(1);
}
}
}
int main() {
int k, s, n;
in >> k >> s >> n;
vector<vector<int>> e (n, vector<int>(k));
for (int i = 0; i < n; ++i)
for (int j = 0; j < k; ++j)
in >> e[i][j];
eg = e;
kg = k; sg = s; ng = n;
vector<int> sol(k, 0);
vector<int> sum(k, 0);
solg = sol;
sumg = sum;
rec(0);
out << ways % 3210121;
}