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
问题描述:
从三角形 的顶至底的一条路径(每一步可沿左斜线向下或右斜线向下),使该路径经过的数字总和最大。
算法描述:
声明另一个与输入同样大小的数组,(最后一行可以不用考虑填写,)而其余空从下往上,从左往右开始,从输入数组同样位置的下一行的同一列和下一列数字中选择最大的数字,加上数组原位置上的数,填写如新数组中,填写一个新的表格。逐次往上加,第一行第一列的数即为所要的最大值。
代码:
書式#include <iostreamの>
名前空間stdを使用。
int型のD [101] [101]、W [101] [101]、N。
ボイドfindMax(){
(S ++; S <= N INT S = 1)のために
D [n]は[S] = W [N] [S]。
以下のために(INT I = N-1、I> = 1; I - ){
(INT J = 1; J <= I; J ++)のために{
IF(D [I + 1] [J]> = D [I + 1] [J + 1])
D [i] [j]は[I] [J] + D [I + 1] [j]はW =。
他
D [i] [j]は[I] [J] + Dの[I + 1] W = [J + 1]。
}
}
}
{int型のmain()
cinを>> N;
以下のために{(INT i = 1; iが++; iが<= N)
(INT J = 1; J <= I; J ++)のために{
CIN >> [I] [J]ワット。
}
}
findMax();
COUT << D [1] [1]。
}
経験:、問題を解決する最初の再帰シンプルに比べアイデアを見つけて、この問題では、ここで私たちのチームの多くをクリアするといくつかのアイデアコードを明確にするために私たちを導かないためにアイデアを充填が質問されている、我々は適切に実行することはできません。慎重な分析が唯一の初期充填での式を用いて問題解決に失敗するために少し原因がある見つけるために、独自のコードの後ろに問題を分析します。