Qual o erro na resolução desse problema?

Criei um código para resolver o problema Pirâmide, da OBI de 2018, que não está funcionando corretamente. A lógica empregada foi a seguinte: como não há colunas vazias em uma pirâmide, só haverá duas possibilidades de exclusão de coluna começando pela base da pirâmide: a coluna mais a esquerda e a mais a direita. Com isso, basta calcular qual contém maior peso e zerá-la. Desse jeito, pode-se prosseguir até o topo, e não haverá nenhum espaço ou coluna em branco no meio da pirâmide. Isso funciona para os dois exemplos dados no problema, mas quando submetido, resulta numa quase totalidade de erros. Segue abaixo o código:

#include <iostream> using namespace std;  int main(){     int N, resp=0;     cin >> N;     int p[N][N];     int e=0, d=N-1, sE, sD;     for(int i=0;i<N;i++){         for(int j=0;j<N;j++){             cin >> p[i][j];         }     }     for(int i=N-2;i>=0;i--){         sE=0;         sD=0;         for(int j=0;j<=i;j++){             sE+=p[j][e];             sD+=p[j][d];         }         if(sE>sD){             for(int j=0;j<=i;j++){                 p[j][e]=0;             }             e++;         }         else{             for(int j=0;j<=i;j++){                 p[j][d]=0;             }             d--;         }     }     for(int i=0;i<N;i++){         for(int j=0;j<N;j++){             resp += p[i][j];         }     }     cout << resp << endl;     return 0; }