Pagini recente » Cod sursa (job #521439) | Cod sursa (job #2238063) | Cod sursa (job #761402) | Cod sursa (job #1798326) | Cod sursa (job #2209221)
#include<fstream>
#define MOD 3210121
using namespace std;
ifstream fi("cowfood.in");
ofstream fo("cowfood.out");
int k,s,n,i,j,Dp[2][10005],rez,A[25][35],Mx[25][35],S[25];
void g(int ind)
{
int i;
if(ind>0)
{
for(i=1; i<=k; i++)
Mx[ind][i]=max(Mx[ind-1][i],A[S[ind]][i]);
int sum=0;
for(i=1; i<=k; i++)
{
sum=sum+Mx[ind][i];
if(sum>s)
{
sum=100001;
break;
}
}
if(sum<=s)
{
if(ind%2==0)
rez=(rez+Dp[k%2][s-sum])%MOD;
else
rez=(rez-Dp[k%2][s-sum]+MOD)%MOD;
}
}
if(ind<n)
for(i=S[ind]+1; i<=n; i++)
{
S[ind+1]=i;
g(ind+1);
}
}
int main()
{
fi>>k>>s>>n;
for(i=1; i<=s; i++)
Dp[1][i]=1;
Dp[1][0]=1;
for(i=2; i<=k; i++)
{
Dp[i%2][0]=1;
for(j=1; j<=s; j++)
Dp[i%2][j]=(Dp[1-(i%2)][j]+Dp[i%2][j-1])%MOD;
}
for(i=1; i<=n; i++)
for(j=1; j<=k; j++)
fi>>A[i][j];
for(i=1; i<=s; i++)
Dp[k%2][i]=(Dp[k%2][i-1]+Dp[k%2][i])%MOD;
rez=Dp[k%2][s];
rez=(rez-((k*s+1)%MOD)+MOD)%MOD;
g(0);
fo<<rez<<"\n";
fi.close();
fo.close();
return 0;
}