Cod sursa(job #2575959)

Utilizator RazvanucuPopan Razvan Calin Razvanucu Data 6 martie 2020 16:27:39
Problema Diamant Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
ifstream f("diamant.in");
ofstream g("diamant.out");
int N,M,X,sum,nr,v[405],cnt;
const int Mod=10000,Mx=44100;
int dp[405][44500];
int main()
{
    f>>N>>M>>X;
    for(int i=1; i<=N; i++)
        for(int j=1; j<=M; j++)
        {
            sum+=(i*j);
            v[++cnt]=i*j;
        }
    if(X<0)
        X*=-1;
    if(sum==abs(X))
        g<<1;
    else
    {
        if(sum<X)
            g<<0;
        else
        {
           dp[0][0]=1;
            for(int i=1; i<=M*N; i++)
            {
                for(int j=0; j<=sum; j++)
                {
                     dp[i][j]=dp[i-1][j];
                     if(j-v[i]>=0)
                        dp[i][j]=(dp[i][j]+dp[i-1][j-v[i]])%Mod;
                     if(j+v[i]<=sum)
                        dp[i][j]=(dp[i][j]+dp[i-1][j+v[i]])%Mod;

                     if(dp[i][j])
                        cout<<i<<" "<<j<<" = "<<dp[i][j]<<"\n";
                 }
             }

         g<<dp[N*M][X];
        }

    }

    return 0;
}