#エンコーディング:UTF-8
#トピックは:選択したARRの数字の束は、選択された数は、それに隣接していない、そして、選択された数の和と最大になり
NPとしてnumpyのインポート
ARR = [1,2,4,1,7,8,3]
#再帰的な言葉遣い
デフrec_opt(ARR、I):
私== 0の場合:
ARR戻る[0]
elifのI == 1:
戻りMAX(ARR [0]、ARR [1])
#なぜここに隣接する2の最大のリターンはありますか?
#これはまだ条件に反しありませんか?
他:
A = rec_opt(ARR、I-2)+ ARR [I]
B = rec_opt(ARR、I-1)
戻るMAX(A、B)
#非再帰的な書き込み
デフdp_opt(ARR):
OPT = np.zeros(LEN(ARR))
#ARRに等しい配列のサイズを作成し、そしてゼロで埋め
オプト[0] =のARR [0]
オプト[1] = MAX(ARR [0]、[1] ARR)
Iの範囲内の(2、LEN(ARR))のために:
A = OPT [I-2] + ARR [I]
B = OPT [I-1]
オプト[I] = MAX(A、B)
リターンのオプト[LEN(ARR)-1]
__name__ == "__main__" の場合:
プリント(rec_opt(ARR、6))
印刷(dp_opt(ARR))
#エンコード= UTF-8
#番号2の山があるかどうかを見つけるために、彼らはSを合計数に等しいです
ARR = [3,34,4,12,5,2]
デフ(ARR、I、S)rec_subset:
== 0秒の場合:
真を返します
elifの私== 0:
[0] == sのARR戻ります
elifの[i]は> S ARR:
リターンrec_shbset(ARR、I-1、S)
他:
= rec_subset(ARR、I-1、S-ARR [i])と
#エンコーディング:UTF-8
#トピックは:選択したARRの数字の束は、選択された数は、それに隣接していない、そして、選択された数の和と最大になり
NPとしてnumpyのインポート
ARR = [1,2,4,1,7,8,3]
#再帰的な言葉遣い
デフrec_opt(ARR、I):
私== 0の場合:
ARR戻る[0]
elifのI == 1:
戻りMAX(ARR [0]、ARR [1])
#なぜここに隣接する2の最大のリターンはありますか?
#これはまだ条件に反しありませんか?
他:
A = rec_opt(ARR、I-2)+ ARR [I]
B = rec_opt(ARR、I-1)
戻るMAX(A、B)
#非再帰的な書き込み
デフdp_opt(ARR):
OPT = np.zeros(LEN(ARR))
#ARRに等しい配列のサイズを作成し、そしてゼロで埋め
オプト[0] =のARR [0]
オプト[1] = MAX(ARR [0]、[1] ARR)
Iの範囲内の(2、LEN(ARR))のために:
A = OPT [I-2] + ARR [I]
B = OPT [I-1]
オプト[I] = MAX(A、B)
リターンのオプト[LEN(ARR)-1]
__name__ == "__main__" の場合:
プリント(rec_opt(ARR、6))
印刷(dp_opt(ARR))
B = rec_subset(ARR、I-1、S)
AまたはBを返します
__name __ = "__ MAIN__" であれば
印刷(rec_subset(編曲、LEN(ARR)-1,9-)