Pagini recente » Cod sursa (job #2325875) | Cod sursa (job #1606533) | Cod sursa (job #2253407) | Cod sursa (job #127541) | Cod sursa (job #3295260)
#include <fstream>
using namespace std;
ifstream cin("cowfood.in");
ofstream cout("cowfood.out");
#define MOD 3210121
#define int long long
int v[40][40];
int a[40],aux1[40];
int dp[32][16384];
int rasp,k,s,n;
void back_track(int poz,int bit){
int i;
if(poz==n+1){
int sum=0,aux;
for(i=1;i<=k;i++) sum+=aux1[i];
if(sum<=s){
aux=dp[k][s-sum];
if(bit%2) aux=-aux;
///cout<<aux<<"\n";
rasp=(rasp+MOD+aux)%MOD;
}
}else{
back_track(poz+1,bit);
int copie[k+1];
for(i=1;i<=k;i++){
copie[i]=aux1[i];aux1[i]=max(aux1[i],v[poz][i]);
}
back_track(poz+1,bit+1);
for(i=1;i<=k;i++) aux1[i]=copie[i];
}
}
signed main()
{
int i,j;cin>>k>>s>>n;
for(i=1;i<=n;i++){
for(j=1;j<=k;j++){
cin>>v[i][j];
}
}
for(i=0;i<=s;i++) dp[0][i]=1;
for(i=1;i<=k;i++){
dp[i][0]=1;
for(j=1;j<=s;j++){
dp[i][j]=(dp[i-1][j]+dp[i][j-1])%MOD;
}
}
back_track(1,0);
cout<<(MOD+rasp-1-s*k)%MOD;
return 0;
}