[C++]白駿1932:整数三角形
9701 ワード
#include <iostream>
using namespace std;
int main(void){
int n, maxNum = 0;
int arr[501][501]; // 값 입력 받는 arr 0 ~ 500
int dp[501][501] = {0}; // 합계 구할 arr 0 ~ 500
scanf("%d", &n);
for(int i = 1; i <= n; i++){ // 1부터 하는 이유는 인덱스 벗어나지 않게 하려고
for(int j = 1; j <= i; j++) {
scanf("%d", &arr[i][j]); //값 입력받기
}
}
dp[1][1] = arr[1][1]; // 첫째 줄 값
for(int i = 2; i <= n; i++){ // 삼각형 두번째 줄 부터 값 합산 시작
for(int j = 1; j <= i; j++){
dp[i][j] = max(dp[i-1][j-1], dp[i-1][j]) + arr[i][j]; // 해당 인덱스와 그 전 줄에서 큰 것 합산
}
}
for(int i=0; i<=n; i++){
if(maxNum < dp[n][i]){ // 마지막 줄이 결과 값
maxNum = dp[n][i];
}
}
printf("%d", maxNum);
return 0;
}
今日のポイント
パスカル三角形を利用した問題.
白駿1010架橋題とよく似ています.
0から並べ替えを開始すると、0-1はインデックスの範囲外になるため、1からインデックスが使用されます.
上から考えるのではなく、下から上へ考えるのです.合算値は、前の行の最大値に自分の値を加えた値に等しい.
てんかしき
dp[i][j] = max(dp[i-1][j-1], dp[i-1][j]) + arr[i][j];
Reference
この問題について([C++]白駿1932:整数三角形), 我々は、より多くの情報をここで見つけました https://velog.io/@lamknh/C-백준-1932-정수-삼각형テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol