Pagini recente » Cod sursa (job #3350320) | Cod sursa (job #601678) | Cod sursa (job #3350286) | Cod sursa (job #472702) | Cod sursa (job #3345832)
#include <fstream>
#define mod 3210121
using namespace std;
ifstream cin("cowfood.in");
ofstream cout("cowfood.out");
int a[21][31],b[21],dp[10002][31],ans,k,n,s;
void bck(int pas,int last){
if(pas!=0){
int sum=0;
for(int j=1;j<=k;j++){
int maxi=0;
for(int p=1;p<=pas;p++)
maxi=max(maxi,a[b[p]][j]);
sum+=maxi;
if(sum>s)
return ;
}
sum=s-sum;
if(pas%2==0)
ans=(ans-dp[sum][k]+mod)%mod;
else
ans=(ans+dp[sum][k])%mod;
}
for(int i=last+1;i<=n;i++){
b[pas+1]=i;
bck(pas+1,i);
}
}
signed main()
{
cin>>k>>s>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=k;j++)
cin>>a[i][j];
}
for(int j=1;j<=k;j++)
dp[0][j]=1;
for(int i=1;i<=s;i++)
for(int j=1;j<=k;j++)
dp[i][j]=(dp[i-1][j]+dp[i][j-1])%mod;
for(int i=1;i<=s;i++)
for(int j=1;j<=k;j++)
dp[i][j]=(dp[i][j]+dp[i-1][j])%mod;
bck(0,0);
/// nr total de permutari - permutarea (0,0,0 ..) - cele care au doar un eleme nenul
cout<<(dp[s][k]-1-1ll*s*k%mod-ans+2*mod)%mod;
return 0;
}