Pagini recente » Cod sursa (job #1346609) | Cod sursa (job #1152540) | Cod sursa (job #1153400) | Cod sursa (job #518239) | Cod sursa (job #3330266)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("cowfood.in");
ofstream g("cowfood.out");
const int MOD=3210121,
NMAX=21,
KMAX=31,
SMAX=10001;
int K,S,N,V,E;
int M[NMAX][KMAX],x[NMAX] , MAX[NMAX][KMAX], SCOMB[SMAX];
void calcSumComb() {
for(int i=0;i<=S;++i)
SCOMB[i]=1;
for(int i=1;i<=K;++i)
for(int j=1;j<=S;++j) {
SCOMB[j]+=SCOMB[j-1];
SCOMB[j]%=MOD;
}
}
void bt(int k) {
for(int i=x[k-1]+1;i<=N;++i) {
int sum=0;
for(int j=1;j<=K;++j) {
MAX[k][j]=max(MAX[k-1][j],M[i][j]);
sum+=MAX[k][j];
}
if(sum<=S) {
if(k%2!=0)
{
E+=SCOMB[S-sum];
if(E>=MOD)E-=MOD;
}
else
{
E-=SCOMB[S-sum];
if(E<0)E+=MOD;
}
x[k]=i;
bt(k+1);
}
}
}
int main()
{
f>>K>>S>>N;
for(int i=1;i<=N;++i)
for(int j=1;j<=K;++j)
f>>M[i][j];
calcSumComb();
bt(1);
V=SCOMB[S]-S*K-E-1;
V%=MOD;
if(V<0)V+=MOD;
g<<V;
return 0;
}