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)