Cod sursa(job #630557)

Utilizator a_h1926Heidelbacher Andrei a_h1926 Data 5 noiembrie 2011 19:35:05
Problema Plus Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <cstdio>

#define SMax 100005

using namespace std;

long long N[3], V[3], S[2][2*SMax+2], Sum, SumMin, SumMax;

void Read ()
{
    freopen ("plus.in", "r", stdin);
    scanf ("%lld", &Sum);
    for (int i=0; i<3; ++i)
    {
        scanf ("%lld %lld", &N[i], &V[i]);
        if (V[i]==-1)
        {
            SumMin-=N[i];
        }
        if (V[i]==1)
        {
            SumMax+=N[i];
        }
    }
}

void Print ()
{
    freopen ("plus.out", "w", stdout);
    printf ("%lld\n", S[0][Sum+SMax]);
}

void Solve ()
{
    S[0][SMax]+=1;
    int l=1;
    for (int i=0; i<3; ++i, l^=1)
    {
        for (long long s=SumMin; s<=SumMax; ++s)
        {
            S[l][s+SMax]=0;
        }
        for (long long s=SumMin; s<=SumMax; ++s)
        {
            for (int n=0; n<=N[i]; ++n)
            {
                S[l][s+SMax]+=S[l^1][s+SMax-V[i]*n];
            }
        }
    }
    S[0][Sum+SMax]=S[l^1][Sum+SMax];
}

int main()
{
    Read ();
    Solve ();
    Print ();
    return 0;
}