Cod sursa(job #2695893)

Utilizator seburebu111Mustata Dumtru Sebastian seburebu111 Data 14 ianuarie 2021 20:02:54
Problema Diamant Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream in("diamant.in");
ofstream out("diamant.out");

int dp[100001], dp2[100001];


int main()
{
    int n, m, x;
    in>>n>>m>>x;

    int sum=0, min1, min2, max1, max2;
    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++)
            sum+=i*j;

    if(sum<x || sum<-x)
    {
        out<<0;
        return 0;
    }
    min1=max1=min2=max2=sum;
    dp[sum]=1;
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=m; j++)
        {
            for(int k = max2; k>=min2; k--)
                if(dp[k]!=0)
                {
                    dp2[k+i*j] +=dp[k];
                    max1=max(max1, k+ i*j);
                    dp2[k-i*j] +=dp[k];
                    min1=min(min1, k- i*j);
                }
            for(int k=min1; k<=max1; k++)
            {
                dp[k] +=dp2[k];
                dp2[k]=0;
                dp[k] %=10000;
            }
            min2=min1;
            max2=max1;
        }
    }
    out<<dp[sum+x];
    return 0;
}