プログラマ整数三角形
2446 ワード
質問する
https://programmers.co.kr/learn/courses/30/lessons/43105
コード#コード#
cpp
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int solution(vector<vector<int>> triangle) {
int answer = 0;
for(int i=1;i<triangle.size();i++){
for(int j=0;j<triangle[i].size();j++){
if(j==0) triangle[i][j]+=triangle[i-1][j];
else if(j==triangle[i].size()-1) triangle[i][j]+=triangle[i-1][j-1];
else {
triangle[i][j]+=max(triangle[i-1][j-1],triangle[i-1][j]);
}
}
}
answer=*max_element(triangle[triangle.size()-1].begin(),triangle[triangle.size()-1].end());
return answer;
}
python
def solution(m, n, puddles):
answer = 0
dp = [[0]*(m+1) for _ in range(n+1)]
dp[1][1] = 1
for x, y in puddles:
dp[y][x] = -1
for i in range(1, n+1):
for j in range(1, m+1):
if dp[i][j] == -1:
dp[i][j] = 0
continue
if i == j == 1:
continue
dp[i][j] = dp[i-1][j]+dp[i][j-1]
return dp[n][m]%1000000007
に答える
これはデフォルトのdp問題で、整数三角形を含み、上部から下部までのパスを通過する数値の最大値を返します.次の格子に移動する場合は、対角線に対して1つの格子しか移動できません.
2行目から、上から入力できる大きな値を入力して続行します.
三角形の2行目から求めればいいです.現在の数字が左または右の最後尾の数字であれば、上の終了数字を直接加算します.そうでなければ、自分の対角線の上の数字に大きな数字を取り、現在の数字を加算します.
たとえば、上から3番目の行の8のように、上からインポートできる数字が3.1の場合、3と8に大きな数字を追加し、0に8を追加します.そうするとdpテーブルが完成し、最大の値を戻せばいいのです.
7
10 15
18 16 15
20 25 20 19
24 30 27 26 24
二重forゲートを全部回すと三角形が完成します.Reference
この問題について(プログラマ整数三角形), 我々は、より多くの情報をここで見つけました https://velog.io/@josajang98/정수-삼각형テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol