Cod sursa(job #1804826)

Utilizator moise_alexandruMoise Alexandru moise_alexandru Data 13 noiembrie 2016 01:27:01
Problema 1-sir Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("1-sir.in");
ofstream out("1-sir.out");
const int mod = 194767;
const int maxs = 35000;
const int maxn = 270;
int dp[2][maxs * 3][maxn * 2];
int main()
{
    int n, S;
    in >> n >> S;
    int smax = n * (n + 1) / 2;
    if(S > smax || S < -smax)
    {
        out << 0 << "\n";
        return 0;
    }
    dp[1][maxs][maxn] = 1;
    for(int i = 2; i <= n; i++)
    {
        int p = i % 2;
        for(int s = -smax; s <= smax; s++)
        {
            for(int j = - (i - 1); j <= i - 1; j++)
            {
                dp[p][s + maxs + j - 1][maxn + j - 1] += dp[1 - p][s + maxs][j + maxn];
                dp[p][s + maxs + j - 1][maxn + j - 1] %= mod;
                dp[p][s + maxs + j + 1][maxn + j + 1] += dp[1 - p][s + maxs][j + maxn];
                dp[p][s + maxs + j + 1][maxn + j + 1] %= mod;
            }
        }
    }
    int nr = 0;
    for(int i = -n; i <= n; i++)
        nr = (nr + dp[n % 2][S + maxs][maxn + i]) % mod;
    out << nr;
    return 0;
}