Pagini recente » Cod sursa (job #474184) | Monitorul de evaluare | Cod sursa (job #598792) | Cod sursa (job #2195403) | Cod sursa (job #3326488)
#include <fstream>
using namespace std;
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];
ifstream f("cowfood.in");
ofstream g("cowfood.out");
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-1-E)%MOD;
if(V<0)V+=MOD;
g<<V;
f.close();
g.close();
return 0;
}