Cod sursa(job #2461263)

Utilizator AlexBolfaAlex Bolfa AlexBolfa Data 25 septembrie 2019 11:34:29
Problema Diamant Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <bits/stdc++.h>
using namespace std;
FILE *fin=fopen("diamant.in", "r");
FILE *fout=fopen("diamant.out", "w");
const int MOD = 10000;
const int VMAX = 44104;

int n,m,x;
int dp[2][VMAX*2];
bool used[VMAX*2];
vector <int> v;

int main(){
    int i,j,q,it,sz;
    bool lin=0;
    fscanf(fin, "%d%d%d", &n,&m,&x);
    v.push_back(0);
    used[VMAX]=1;
    dp[!lin][VMAX]=1;
    for(i=1;i<=n;++i)
        for(j=1;j<=m;++j){
            sz=v.size();//elementele care erau deja in dp
            memset(dp[lin], 0, sizeof dp[lin]);
            for(q=0;q<sz;++q){
                it=v[q] + VMAX;
                if(!used[it+i*j]){
                    used[it+i*j]=1;
                    v.push_back(v[q]+i*j);
                }
                if(!used[it-i*j]){
                    used[it-i*j]=1;
                    v.push_back(v[q]-i*j);
                }

                dp[lin][it]=(dp[lin][it] + dp[!lin][it]) % MOD;
                dp[lin][it+i*j]=(dp[lin][it+i*j] + dp[!lin][it]) % MOD;
                dp[lin][it-i*j]=(dp[lin][it-i*j] + dp[!lin][it]) % MOD;
            }
            lin=!lin;
        }


    fprintf(fout, "%d", dp[!lin][x+VMAX]);
    return 0;
}