DP:デジタルトライアングル(動的計画法入門)

POJ 1163 数字三角形

説明

ここに画像の説明を挿入します
上のデジタル三角形で上から下へのパスを見つけて、パス上の数字の合計が最大になるようにします。パスのすべてのステップは、左または右にのみ進むことができます。最大額を要求するだけで、特定のパスを指定する必要はありません。
三角形の行数は1より大きく100以下であり、その数は0〜99です。

入力

最初の行にデジタル三角形の行数を入力してから、三角形の数を入力します

出力

質問に必要な最大数の合計を出力します

サンプル入力

5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5

サンプル出力

30

ACコード

#include <iostream>
#define MAX 101
using namespace std;
int D[MAX][MAX];
int *maxSum;
int i, j, n;

int main()
{
    
    
 	cin >> n;
 	for(i = 1;i <= n;i++)
		for(j = 1;j <= i;j++)
 			cin >> D[i][j];
 	maxSum = D[n]; //*maxSum指向第n行
 	
	for(i = n-1; i >= 1;i--)//从第n-1行开始向上 
		for(j = 1; j <= i;j++)
 			maxSum[j] = max(maxSum[j], maxSum[j+1]) + D[i][j];
  //通过用指针不断迭代更新第n行的数实现空间的节省
 	cout << maxSum[1] << endl;
 	return 0;
}

アルゴリズムの時間計算量はo(n 2)o(n ^ 2)です。o n2

おすすめ

転載: blog.csdn.net/m0_51354361/article/details/113481264