Pagini recente » Cod sursa (job #2299462) | Cod sursa (job #1865088) | Cod sursa (job #2519830) | Cod sursa (job #2375155) | Cod sursa (job #1952804)
#include <bits/stdc++.h>
#define pb push_back
#define NMAX 35
#define ll long long
#define x first
#define y second
#define INF 0x3f3f3f3f
#define MOD 3210121
using namespace std;
ifstream fin("cowfood.in");
ofstream fout("cowfood.out");
int dp[35][10100],n,k,s,ans;
int v[35][35],act[35],aux[35][35];
inline void pinex(int level, int exp) {
if(level>=n){
int sum=0;
for(int i=0; i<k; i++)
sum+=act[i];
if(sum<=s && exp>0){
if(exp&1){
ans+=dp[k+1][s-sum];
if(ans>=MOD) ans-=MOD;
}
else {
ans-=dp[k+1][s-sum];
if(ans<0) ans+=MOD;
}
}
return;
}
pinex(level+1,exp);
int i;
for(i=1;i<=k;++i){
aux[level][i]=act[i];
act[i]=max(act[i], v[level][i]);
}
pinex(level+1,exp+1);
for(i=1;i<=k;++i)
act[i]=aux[level][i];
}
int main() {
int i,j;
fin>>k>>s>>n;
for(i=1;i<=n;++i)
for(j=1;j<=k;++j) fin>>v[i][j];
for(i=1;i<10005;++i){
for(j=0;j<35;++j){
if(j==0 || j==1) dp[j][i]=1;
else dp[j][i]=(dp[j-1][i]+dp[j][i-1])%MOD;
}
}
pinex(0,1);
fout<<(dp[k+1][s]-ans-k*s-1+2*MOD)%MOD;
return 0;
}