Cod sursa(job #487020)

Utilizator freak93Adrian Budau freak93 Data 23 septembrie 2010 16:35:26
Problema Cowfood Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#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";
}