プログラマ-整数三角形(C++)


#include <string>
#include <vector>
using namespace std;

int DP[501][501] = {0,};

int solution(vector<vector<int>> triangle) {
    int answer = 0;
    int triSize = triangle.size();
    
    DP[1][1] = triangle[0][0];
    
    for (int i = 2; i <= triSize; i++) {
        for (int j = 1; j <= i; j++) {
            if (DP[i-1][j-1] > DP[i-1][j]) {
                DP[i][j] = DP[i-1][j-1] + triangle[i-1][j-1];
            } else {
                DP[i][j] = DP[i-1][j] + triangle[i-1][j-1];
            }
        }
    }
    
    for(int i = 1; i <= triSize; i++){
        if(answer < DP[triSize][i]){
            answer = DP[triSize][i];
        }
    }
    
    return answer;
}
条件-三角形の頂部から底部まで、経路の和の最大値を求めます.
これは簡単なDP問題です.値を検索するために配列を再割り当てましたが、他の人のプールが見えました.
与えられたベクトル端点から逆端点へベクトル値を直接更新して解答を探す方法もある.
それをより効果的に見つける方法を考えます.