1.実践トピック
7-1デジタル三角形(30)
図に示すように、n番目の行番号によって形成されるデジタル三角形を考えます。最大パスのデジタルサムが通過するように、三角形の上から下への経路を計算するためのアルゴリズム(左斜線又は右対角線に沿って下方に各ステップ)を設計しようとします。
入力フォーマット:
行n + 1が入力されます。
ライン1は、行の数は、1 <= N <= 100、nは三角形です。
次の行のnは、各行の数の三角形の数です。0..99間のすべての数字。
出力フォーマット:
出力パスの最大値。
サンプル入力:
ここでは、入力のセットを与えられています。例えば:
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
出力例:
出力に対応し、ここで考えます。例えば:
30
2.问题描述
思路:从数字三角的的倒数第二行(n-1)【2,7,4,4】行开始往上,取(n-1)行的下一行,即第n行【4,5,2,6,5】,将(n-1)行的第一个元素2与它的下一行第一个元素4以及下一行的第二个元素5分别相加取最大值,即max(2+4,2+5),将max存入n-1行的第一个元素,依次循环得到从n行到n-1行的值存在n-1行。n-行继续向上,最后顶端的数字即最长路径数。
3.算法描述
-----------------------------------------------------------------------------------------------------------------------------------
書式#include <iostreamの>
名前空間stdを使用。
int型のres [1005] [1005];
[1005] [1005] INT。
メインint型()
{
N INT、MAXN = 0。
scanf関数( "%のD"、&N);
以下のために(INT i = 1; iが<= N; iは++します)
{
(int型J = 1; J <= iであり、j ++)について
{
CIN >> [I] [J]。
}
}
以下のために(INT I = N-1、I> 0; i--)
{
(int型J = 1; J <= iであり、j ++)について
{
[I] [J] + = MAX([I + 1] [j]は、[I + 1] [J + 1])。
}
}
COUT << [1] [1] << ENDL。
0を返します。
}
-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ----------------
3.アルゴリズムと空間分析の時間複雑
時間計算量はO(N2)は、動的計画時の循環のための2つのフロア、そして一つだけの文を持っています。空間複雑度は、O(N 2)であり、2次元アレイを作成し、各列の各行は、O(N 2)であり、nは。
4.経験(収穫と疑問要約の練習)
突然アイデアがあるまでは考えて始めていない三角数、。それぞれの質問には慎重に考える必要があるために、コードをノックして急いではありません。