Cod sursa(job #2301062)

Utilizator patcasrarespatcas rares danut patcasrares Data 12 decembrie 2018 16:44:08
Problema Diamant Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.14 kb
#include<iostream>
#include<fstream>
#include<unordered_map>
#include<cmath>
using namespace std;
ifstream fin("diamant.in");
ofstream fout("diamant.out");
const int DN=1e5+5,M=1e4,lim=5e4;
int n,m,sum,dp[2][DN],f,pr,ur=1,poz,vec;
int main()
{
    fin>>n>>m>>f;
    if(abs(f)>lim)
    {
        fout<<0;
        return 0;
    }
    dp[0][lim]=1;
    for(int l=1;l<=n;l++)
        for(int c=1;c<=m;c++)
        {
            sum+=l*c;
            for(int i=-sum;i<=sum;i++)
                dp[ur][i+lim]=dp[pr][i+lim];
            for(int i=-sum;i<=sum;i++)
            {
                poz=i+lim;
                vec=poz+l*c;
                if(vec<DN)
                {
                    dp[ur][vec]+=dp[pr][poz];
                    if(dp[ur][vec]>=M)
                        dp[ur][vec]-=M;
                }
                vec=poz-l*c;
                if(vec>=0)
                {
                    dp[ur][vec]+=dp[pr][poz];
                    if(dp[ur][vec]>=M)
                        dp[ur][vec]-=M;
                }
            }
            pr=1-pr;
            ur=1-ur;
        }
    fout<<dp[pr][f+lim];
}