Cod sursa(job #2415191)

Utilizator bluestorm57Vasile T bluestorm57 Data 25 aprilie 2019 16:47:31
Problema Diamant Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <fstream>
#include <vector>

using namespace std;

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

int n,m,target;
int suma;
vector <int> dp[2];
const int mod = 10000;

int main(){
    int i,j,p;
    f >> n >> m >> target;

    for(i = 1 ; i <= n ; i++)
        for(j = 1 ; j <= m ; j++)
            suma += i * j;

    if(target > suma || target < -suma){
        g << "0\n";
        return 0;
    }

    dp[0].resize(suma * 2 + 7);
	dp[1].resize(suma * 2 + 7);

    dp[0][suma] = 1;

    for(i = 1 ; i <= n ; i++)
        for(j = 1 ; j <= m ; j++){

            for(p = 0 ; p <= 2 * suma ; p++){
                dp[1][p] = dp[0][p];

                if(p + i * j <= 2 * suma)
                    dp[1][p] += dp[0][p + i * j];
                if(p - i * j >= 0)
                    dp[1][p] += dp[0][p - i * j];

                dp[1][p] %= mod;
            }

            dp[0].swap(dp[1]);

        }
    g << dp[0][suma + target];

return 0;
}