Pagini recente » Cod sursa (job #1040856) | Cod sursa (job #3230640) | Cod sursa (job #2209667) | Cod sursa (job #20058) | Cod sursa (job #191884)
Cod sursa(job #191884)
#include <stdio.h>
#include <string>
#define maxn 35
#define maxx 10010
#define mod 3210121
#define max(a,b) (a > b ? a : b)
int n, m, s, sol;
int a[maxn][maxn];
int c[maxx], d[maxx];
int v[maxn];
int main()
{
freopen("cowfood.in", "r", stdin);
freopen("cowfood.out", "w", stdout);
scanf("%d %d %d ", &n, &s, &m);
int i, j, k, S, semn;
for (i=1; i<=n; i++)
for (j=1; j<=m; j++) scanf("%d ", &a[i][j]);
c[0] = 1;
for (i=0; i<m; i++)
{
memcpy(d, c, sizeof(c));
memset(c, 0, sizeof(c));
for (j=0; j<=s; j++)
{
c[j] = c[j-1] + d[j];
if (c[j] >= mod) c[j] -= mod;
}
}
for (i=1; i<=s; i++)
{
c[i] += c[i-1];
if (c[i] >= mod) c[i] -= mod;
}
for (i=0; i<1<<n; i++)
{
semn = 1;
for (k=1; k<=m; k++) v[k] = 1;
for (j=0; j<n; j++)
if (i&(1<<j))
{
semn *= -1;
for (k=1; k<=m; k++) v[k] = max(v[k], a[j+1][k]);
}
S = s;
for (j=1; j<=m; j++) S -= v[j];
if (S > 0)
{
sol += semn*c[S];
if (sol < 0) sol += mod;
if (sol >= mod) sol -= mod;
}
}
printf("%d\n", sol);
return 0;
}