Pagini recente » Cod sursa (job #21330) | Cod sursa (job #2114078) | Cod sursa (job #2807114) | Cod sursa (job #1023528) | Cod sursa (job #595510)
Cod sursa(job #595510)
#include<stdio.h>
#define MOD 3210121
#define maxim(a,b) (a>b ? a : b)
int v[34],n,k;
int a[24][34];
int s,sol;
int d[24][34];
void actual(int semn,int v[])
{
if(!semn)
semn--;
int i,sum=0;
for(i=1;i<=k;i++)
sum+=v[i];
if(sum<=s)
sol+=d[k][s-sum]*semn;
if(sol>=MOD)
sol-=MOD;
if(sol<0)
sol+=MOD;
}
void back(int poz,int take,int v[])
{
if(poz==n+1)
{
if(take)
actual(take&1,v);
return ;
}
back(poz+1,take,v);
int i,cv[34];
for(i=1;i<=k;i++)
cv[i]=maxim(v[i],a[poz][i]);
back(poz+1,take+1,cv);
}
int main ()
{
int i,j;
freopen("cowfood.in","r",stdin);
freopen("cowfood.out","w",stdout);
scanf("%d%d%d",&k,&s,&n);
for(i=1;i<=n;i++)
for(j=1;j<=k;j++)
scanf("%d",&a[i][j]);
d[0][0]=1;
for(i=1;i<=k;i++)
for(j=0;j<=s;j++)
if(!j)
d[i][j]=d[i-1][j];
else
{
d[i][j]=d[i-1][j]+d[i][j-1];
if(d[i][j]>=MOD)
d[i][j]-=MOD;
}
back(1,0,v);
printf("%d\n",sol);
return 0;
}