Pagini recente » Cod sursa (job #79707) | Cod sursa (job #2209760) | Cod sursa (job #2888250) | Cod sursa (job #2539436) | Cod sursa (job #2338872)
#include <bits/stdc++.h>
#define Int long long
using namespace std;
ifstream f("cowfood.in");
ofstream g("cowfood.out");
const int mod=3210121;
int k,s,n,i,j,ans,a[25][35],C[10040][35],b[35][1<<18];
int main()
{
f>>k>>s>>n;
for(i=0;i<=s+k;i++)
{
C[i][0]=1;
for(j=1;j<=i&&j<=k;j++)
C[i][j]=(C[i-1][j]+C[i-1][j-1]>=mod)?C[i-1][j]+C[i-1][j-1]-mod:C[i-1][j]+C[i-1][j-1];
}
for(i=1;i<=n;i++)
for(j=1;j<=k;j++)
f>>a[i][j];
memset(b,0,sizeof(b));
for(int mask=1;mask<(1<<n);mask++)
{
int val=-1,ok=0,sum=0;
for(i=1;i<=n;i++)
if(mask&(1<<(i-1)))
{
val*=-1;
if(!ok)
{
for(j=1;j<=k;j++)
{
b[j][mask]=max(b[j][mask^(1<<(i-1))],a[i][j]);
sum+=b[j][mask];
}
ok=1;
}
}
// g<<mask<<'\n';
// for(j=1;j<=k;j++)
// g<<b[j][mask]<<' ';g<<'\n';
if(sum>s)continue;
ans=(ans+C[s-sum+k][k]*val+mod)%mod;
}
g<<((C[s+k][k]-k*s-1-ans)%mod+mod)%mod;
return 0;
}