Pagini recente » Cod sursa (job #1757720) | Cod sursa (job #2219406) | Cod sursa (job #3227460) | Cod sursa (job #286755) | Cod sursa (job #1756638)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("cowfood.in");
ofstream g("cowfood.out");
const int MOD=3210121;
long long int K,S,N,m[21][31],sol,x[10001],dp[21][10001];
int main()
{
f>>K>>S>>N;
for(int i = 0; i <= S; i++)
dp[0][i] = 1;
for(int i = 1; i <= K; i++)
{
dp[i][0] = 1;
for(int j = 1; j <= S; j++)
{
dp[i][j] = (dp[i - 1][j] + dp[i][j - 1]) % MOD;
}
}
sol=dp[K][S]-S*K-1;
if(sol<0) sol+=MOD;
for(int i=1;i<=N;i++)
for(int j=1;j<=K;j++)
f>>m[i][j];
int nt = 1 << N;
int card = 0;
for(int i = 1; i < nt; i++)
{
long long int j = 0, p2, ndiv = 0, Max[31]={0};
while((p2 = 1 << j) <= i)
{
if(p2 & i)
{
for(int k=1;k<=K;k++)
if(m[j+1][k]>Max[k]) Max[k]=m[j+1][k];
ndiv++;
}
j++;
}
long long int sum=0;
for(int k=1;k<=K;k++)
sum+=Max[k];
long long int prod=dp[K][S-sum];
if(ndiv % 2 == 0)
card += MOD-prod;
else
card += prod;
card%=MOD;
}
sol+=MOD-card;
sol%=MOD;
g<<sol;
return 0;
}