Pagini recente » Cod sursa (job #2269224) | Cod sursa (job #1777748) | Cod sursa (job #3187145) | Cod sursa (job #779810) | Cod sursa (job #487020)
Cod sursa(job #487020)
#include<fstream>
using namespace std;
const char iname[]="cowfood.in";
const char oname[]="cowfood.out";
const int maxn=50;
const int maxs=10005;
const int mod=3210121;
ifstream f(iname);
ofstream g(oname);
int k,s,n,i,j,S,pos[maxn][maxs],a[maxn][maxn],rez,sgn,maxt[maxn],p,elem[maxn][maxn];
void back(int level,int sgn,int path)
{
for(int i=level;i<=n;++i)
{
int S=s;
for(int j=1;j<=k;++j)
elem[path][j]=max(elem[path-1][j],a[i][j]),S-=elem[path][j];
if(S>=0)
rez=(rez+sgn*pos[k][S])%mod;
back(i+1,-sgn,path+1);
}
}
int main()
{
f>>k>>s>>n;
pos[0][0]=1;
pos[1][0]=1;
for(i=1;i<=k;++i,pos[i][0]=1)
for(j=1;j<=s;++j)
pos[i][j]=(pos[i-1][j]+pos[i][j-1])%mod;
for(i=1;i<=n;++i)
for(j=1;j<=k;++j)
f>>a[i][j];
for(i=2;i<=s;++i)
rez=(rez+pos[k][i]-k)%mod;
for(i=1;i<=s;++i)
pos[k][i]=(pos[k][i]+pos[k][i-1])%mod;
back(1,-1,1);
if(rez<0)
rez+=mod;
g<<rez<<"\n";
}