Cod sursa(job #2707376)

Utilizator FrostfireMagirescu Tudor Frostfire Data 16 februarie 2021 20:52:17
Problema Cowfood Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1 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, sum, v[50][50], a[50][50], C[NMAX+10][35], aux[50], 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;
		}
}

void bkt(int p)
{	if(p)
		{	sum = 0;
			for(int i=1; i<=k; i++)
				{	v[p][i] = max(v[p-1][i], a[aux[p]][i]);
					sum += v[p][i];
				}
			if(s >= sum)
				{	if(p % 2 == 0)
						ans = (ans - C[s-sum+k][k] + MOD) % MOD;
					else
						ans = (ans + C[s-sum+k][k]) % MOD; 
				}
			if(p == n)
				return;
		}
	for(int i=aux[p]+1; i<=n; i++)
		{	aux[p+1] = i;
			bkt(p+1);
		}	
}

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];

	bkt(0);
	fout << (C[s+k][k] - s * k - 1 - ans + MOD) % MOD << '\n';
	return 0;
}