Pagini recente » Cod sursa (job #2764898) | Cod sursa (job #1778096) | Cod sursa (job #2828647) | Cod sursa (job #1446518) | Cod sursa (job #2297573)
#include <fstream>
#include<vector>
#define PRIM 3210121
using namespace std;
ifstream f("cowfood.in");
ofstream g("cowfood.out");
int c[10030][30],k,S,n,a[20][30];
void calculeaza_comb()
{
c[0][0]=1;
for(int i=1; i<=k+S; ++i)
{
c[i][0]=1;
for(int j=1; j<min(k+1,i); ++j)
c[i][j]=(c[i-1][j-1]+c[i-1][j])%PRIM;
if(i<=k+1)
c[i][i]=1;
}
return ;
}
int main()
{
f>>k>>S>>n;
for(int i=0; i<n; ++i)
for(int j=0; j<k; ++j)
f>>a[i][j];
calculeaza_comb();
int ans=0;
for(int gen=0; gen<(1<<n); ++gen)
{
vector<int> Max(k,0);
int sgn=1,sum=0;
for(int j=0; j<k; ++j)
{
for(int i=0; i<n; ++i)
if(gen&(1<<i))
{
if(j==0)
sgn*=-1;
Max[j]=max(Max[j],a[i][j]);
}
sum+=Max[j];
}
if(S-sum<0) continue;
ans+=sgn*c[k+S-sum][k];
ans%=PRIM;
//g<<gen<<' '<<ans<<'\n';
}
ans-=(S*k+1);
ans%=PRIM;
g<<ans<<'\n';
return 0;
}