Cod sursa(job #1787674)

Utilizator liviu23Liviu Andrei liviu23 Data 24 octombrie 2016 21:37:19
Problema Diamant Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <fstream>
#include <iostream>
#define DIM 405
#define M 10000
#define SMAX 45000
using namespace std;

int n,m,x,sol[DIM][SMAX],obj[DIM];

int main()
{
    ifstream fin("diamant.in");
    ofstream fout("diamant.out");
    int s=0;
    fin>>n>>m>>x;
    for(int i=1;i<=n;i++)
    for(int j=1;j<=m;j++) {
        obj[++obj[0]]=i*j;
        s+=i*j;
    }
    if(x<-s||x>s) {
        fout<<"0";
        return 0;
    }
    for(int i=1;i<=obj[0];i++) {
        for(int j=2*s;j>=obj[i];j--)
            sol[i][j]=(sol[i-1][j]%M+sol[i-1][j-obj[i]]%M+sol[i-1][j+obj[i]]%M)%M;
        for(int j=obj[i]-1;j>=0;j--)
            sol[i][j]=sol[i-1][j]%M;
        sol[i][obj[i]+s]=(sol[i][obj[i]+s]+1)%M;
        sol[i][-obj[i]+s]=(sol[i][-obj[i]+s]+1)%M;
    }
    fout<<sol[obj[0]][x+s];
    return 0;
}