Cod sursa(job #1838032)

Utilizator PopoviciRobertPopovici Robert PopoviciRobert Data 30 decembrie 2016 20:55:37
Problema Diamant Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include <bits/stdc++.h>
#define MAXSUM 50000
#define MOD 10000
int dp[2][2*MAXSUM];
int v[400];
int main(){
    std::ifstream fin("diamant.in");
    std::ofstream fout("diamant.out");
    int n,m,i,j,k,r,x,sum;
    fin >> n >> m >> x;
    k=sum=0;
    for(i=1;i<=n;i++)
     for(j=1;j<=m;j++){
        sum+=i*j;
        v[k++]=i*j;
     }
    if(x>sum||x<-sum)
      fout << 0;
    else{
      std::sort(v,v+k);
      dp[1][MAXSUM]=1;
      sum=0;
      for(r=0;r<k;r++){
         sum+=v[r];
         for(i=MAXSUM-sum;i<=MAXSUM+sum;i++)
            dp[r&1][i]=(dp[1-r&1][i]+dp[1-r&1][i-v[r]]+dp[1-r&1][i+v[r]])%MOD;
      }
      fout << dp[1-r&1][x+MAXSUM];
    }
    fin.close();
    fout.close();
    return 0;
}