Cod sursa(job #2707356)

Utilizator FrostfireMagirescu Tudor Frostfire Data 16 februarie 2021 20:29:10
Problema Cowfood Scor 56
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <iostream>
#include <fstream>
#define MOD 3210121
#define NMAX 10100

using namespace std;

ifstream fin("cowfood.in");
ofstream fout("cowfood.out");

int k, s, n, a[50][50], C[NMAX+10][35], ans;

void precalc()
{	C[0][0] = 1;
	for(int i=1; i<=NMAX; i++)
		{	C[i][0] = 1;
			for(int j=1; j<=30; j++)
				C[i][j] = (C[i-1][j-1] + C[i-1][j]) % MOD;
		}
}

int main()
{
	fin >> k >> s >> n;
	precalc();
	for(int i=1; i<=n; i++)
		for(int j=1; j<=k; j++)
			fin >> a[i][j];
	for(int mask=1; mask<(1<<n); mask++)
		{	int cnt = 0, v[50] = {0};
			for(int bit=0; bit<n; bit++)
				if(mask & (1 << bit))
					{	cnt++;
						for(int j=1; j<=k; j++)
							v[j] = max(v[j], a[bit+1][j]);
					}
			int sum = 0;
			for(int i=1; i<=k; i++)
				sum += v[i];
			if(sum > s) continue;
			if(cnt % 2 == 0)
				ans = (ans - C[s-sum+k][k] + MOD) % MOD;
			else
				ans = (ans + C[s-sum+k][k]) % MOD;
		}
	fout << (C[s+k][k] - s * k - 1 - ans + MOD) % MOD << '\n';
	return 0;
}