Pagini recente » Cod sursa (job #1433490) | Cod sursa (job #78520) | Cod sursa (job #253151) | Cod sursa (job #1117021) | Cod sursa (job #1105683)
#include <fstream>
#define NM 35
#define SM 10010
using namespace std;
ifstream f("cowfood.in");
ofstream g("cowfood.out");
const int MOD=3210121;
int N, K, S;
int A[NM][NM], B[NM];
int DP[NM][SM];
int ANS;
int main ()
{
f >> K >> S >> N;
for (int i=1; i<=N; i++)
for (int j=1; j<=K; j++)
f >> A[i][j];
DP[0][0]=1;
for (int j=0; j<=S; j++)
DP[1][j]=DP[1][j-1]+1;
for (int i=2; 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];
if (DP[i][j]>=MOD)
DP[i][j]-=MOD;
}
}
for (int conf=0; conf<(1 << N); conf++)
{
int cnt=0;
int i, j;
for (j=1; j<=K; j++)
B[j]=0;
for (i=0; i<N; i++)
if (((1 << i)&conf))
{
cnt++;
for (j=1; j<=K; j++)
B[j]=max(B[j], A[i+1][j]);
}
int NS=S;
for (j=1; j<=K; j++)
NS-=B[j];
if (NS<0)
continue;
if (cnt%2)
{
ANS=ANS+MOD-DP[K][NS];
if (ANS>=MOD)
ANS-=MOD;
}
else
{
ANS=ANS+DP[K][NS];
if (ANS>=MOD)
ANS-=MOD;
}
}
g << ANS << '\n';
f.close();
g.close();
return 0;
}