Cod sursa(job #3263980)

Utilizator PsyDuck1914Feraru Rares-Serban PsyDuck1914 Data 17 decembrie 2024 14:02:13
Problema Diamant Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.41 kb
#include <bits/stdc++.h>

using namespace std;

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

const int NMAX = 405;
const int VMAX = 45e3;
const int MOD = 1e4;

int dp[2][2 * VMAX + 2];

int main()
{
    
    int n, m, x;
    f >> n >> m >> x;
    
    if(x > VMAX or x < -VMAX){
        
        g << 0;
        return 0;
        
    }
    
    dp[0][VMAX] = 1;
    
    int cnt = 0;
    
    for(int i=1; i<=n; i++){
        for(int j=1; j<=m; j++){
            
            cnt ++;
            
            for(int k=-VMAX; k<=VMAX; k++)
                dp[cnt % 2][k + VMAX] = 0; 
            
            for(int k=-VMAX; k<=VMAX; k++){
                
                
                if(k - i * j + VMAX >= 0)
                    dp[cnt % 2][k + VMAX] = (dp[cnt % 2][k + VMAX] + dp[(cnt + 1) % 2][k + VMAX - i * j]) % MOD;
                    
                if(k + i * j <= VMAX)
                    dp[cnt % 2][k + VMAX] = (dp[cnt % 2][k + VMAX] + dp[(cnt + 1) % 2][k + VMAX + i * j]) % MOD;
                
                dp[cnt % 2][k + VMAX] = (dp[cnt % 2][k + VMAX] + dp[(cnt + 1) % 2][k + VMAX]) % MOD;
                
                // if(dp[cnt % 2][k + VMAX])
                //     cout << dp[cnt % 2][k + VMAX] << ' ' << cnt << ' ' << k + VMAX << ' ' << endl;
                
            }
            
            
        }
        
    }
    
    g << dp[(n * m) % 2][x + VMAX] % MOD;

    return 0;
}