Pythonで競合のない最良のチームを見つけるためのプログラム
スコアと年齢という2つのリストがあるとします。ここで、scores[i]とages[i]は、バスケットボールゲームのi番目のプレーヤーのスコアと年齢を表します。総合スコアが最も高いチームを選びたい。ここで、チームのスコアは、チーム内のすべてのプレーヤーのスコアの合計です。ただし、ゲーム内での競合は許可されていません。ここでは、若いプレーヤーのスコアが古いプレーヤーよりも厳密に高い場合、競合が発生します。
したがって、入力がスコア=[5,7,9,14,19]、年齢=[5,6,7,8,9]の場合、すべてのプレーヤーを選択できるため、出力は54になります。
これを解決するには、次の手順に従います-
- sa:=年齢とスコアからそれぞれ要素aとsを取得して形成されたペアのリスト
- リストを並べ替える
- スコア:=saからのスコアのリストを作成する
- maxScore:=0
- n:=スコアのサイズ
- dp:=長さnの配列で、0で埋めます
- 0からn-1の範囲のiの場合、do
- スコア:=スコア[i]
- dp [i]:=スコア
- 0からi-1の範囲のjの場合、do
- スコア[j]<=スコアの場合、
- dp [i]:=dp[i]とdp[j]+スコアの最大値
- スコア[j]<=スコアの場合、
- maxScore:=maxScoreとdp[i]の最大値
- maxScoreを返す
例
理解を深めるために、次の実装を見てみましょう-
def solve(scores, ages): sa = [[a,s] for a,s in zip(ages,scores)] sa.sort() scores = [s for a,s in sa] maxScore = 0 n = len(scores) dp = [0] * n for i in range(n): score = scores[i] dp[i] = score for j in range(i): if scores[j] <= score: dp[i] = max(dp[i],dp[j] + score) maxScore = max(maxScore, dp[i]) return maxScore scores = [5,7,9,14,19] ages = [5,6,7,8,9] print(solve(scores, ages))
入力
[5,7,9,14,19], [5,6,7,8,9]
出力
54
-
Pythonでサービスセンターの最適な位置を見つけるためのプログラム
いくつかの家が配置されている座標点のリストを含む位置のリストがあるとします。 (xc、yc)にサービスセンターを作成し、任意のポイントから(xc、yc)までのユークリッド距離の合計が最小になるようにする場合。したがって、最小距離の合計を見つける必要があります。 したがって、入力がpositions =[(10,11)、(11,10)、(11,12)、(12,11)]のような場合、出力は4.0になります。 これを解決するには、次の手順に従います- numIter:=50 関数total()を定義します。これにはcx、cy、positionsが必要です 合計:=0.0
-
Pythonを使用して最大の確率でパスを見つけるプログラム
n個のノード(ノードには0から番号が付けられます)を持つ無向加重グラフがあるとします。このグラフは、エッジリストを使用して入力として与えられ、各エッジeについて、そのエッジ確率[e]を通過する成功の確率があります。開始ノードと終了ノードもあります。最初から最後まで成功の確率が最大のパスを見つけて、成功の確率を返す必要があります。パスが見つからない場合は、0を返します。 したがって、入力が次のような場合 ノード0から2へのパスが2つあるため、出力は0.24になります。1つは確率0.2、もう1つはノード1を経由するパスの確率は0.4 * 0.6 =0.24で、これが最大です。 これを解