Python
 Computer >> コンピューター >  >> プログラミング >> Python

人物1をチェックするプログラムは、Pythonで最大スコアを取得するかどうかによってキャンディーゲームに勝つことができます


2人のプレーヤーがゲームをプレイしているとします。いくつかのキャンディーが一列に並んでいて、人1には、各キャンディーのポイント値を表すnumsと呼ばれる数字のリストが与えられます。各人の順番で、列の先頭から1つ、2つ、または3つのキャンディーを選び、リストから削除して、ポイントの合計をスコアに追加することができます。このゲームは、キャンディーがすべて削除され、スコアの高い方が勝者となると終了します。人1がこのゲームに勝つことができるかどうかを確認する必要があります。

したがって、入力がnums =[1、1、2、3、50]の場合、出力はTrueになります。これは、人1がキャンディーを1つ取ることができ、他のプレーヤーがキャンディーを1つ、2つ、または3つ取る必要があるためです。いずれにせよ、人1は50の値のキャンディーを取ることができます。

これを解決するには、次の手順に従います-

  • n:=numsのサイズ

  • table:=3つの0を持つ配列。

  • n − 1から0の範囲のiの場合、1ずつ減らします。

    • 利益:=−inf

    • sum_val:=0

    • iからi+3およびnの最小値までの範囲のjについては、次のようにします

      • sum_val:=sum_val + nums [j]

      • 利益:=利益の最大値と(sum_val − table [j − i])

    • set table:=3つの値を持つリスト[profit、table [0]、table [1]]

  • table [0]> 0の場合はtrueを返し、それ以外の場合はfalseを返します

理解を深めるために、次の実装を見てみましょう-

import math
class Solution:
   def solve(self, nums):
      n = len(nums)
      table = [0, 0, 0]
      for i in range(n − 1, −1, −1):
         profit = −math.inf
         sum_val = 0
         for j in range(i, min(i + 3, n)):
            sum_val += nums[j]
            profit = max(profit, sum_val − table[j − i])
         table[:] = [profit, table[0], table[1]]
      return table[0] > 0
ob = Solution()
nums = [1, 1, 2, 3, 50]
print(ob.solve(nums))

入力

[1, 1, 2, 3, 50]

出力

True

  1. Pythonの容量内でさまざまなアイテムを取得することで取得できる最大量を見つけるためのプログラム

    同じ長さの重みと値と呼ばれる2つのリストと、容量kと呼ばれる別の数があるとします。ここで、weights[i]とvalues[i]は、i番目のアイテムの重みと値を示しています。これで、最大でk個の容量の重みを取得でき、各アイテムの最大で1つのコピーしか取得できないため、取得できる値の最大量を見つける必要があります。 したがって、入力が重み=[2、3、4]、値=[2、6、4]、容量=6のような場合、出力は8になります これを解決するには、次の手順に従います- n:=おもりのサイズ dp:=サイズ容量x nの行列で、0で埋めます 0からnの範囲のiについては、 0から容量までの範囲の

  2. 文字列が空かどうかをチェックするPythonプログラム

    この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 文字列を入力したら、文字列が空かどうかを確認する必要があります。 Python文字列は本質的に不変であるため、操作を実行するときは、文字列を処理するときに注意が必要です。 ここでは、上記の問題ステートメントを解決するための2つのアプローチについて説明します- len()メソッドを使用します。 等式演算子を使用します。 アプローチ1:len()メソッドを使用する 例 test_str1 = "" test_str2 = "@@@" if(l