0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

paizaラーニング問題集「【全探索 2】コップの水」を解いてみた

Last updated at Posted at 2024-10-17

▼考え方

この問題を解くために私が考えた内容1.~3.を以下に示します。

1.N個の小さなコップの組合せをすべて求め、それぞれの容量(ml)を計算します。その容量の中でX[ml]を超えないかつ最も大きい容量を出力します。

2.コップの組合せを求めるために、itertoolsというモジュールを使用します。以下に使用例を示します。

import itertools

w = [30,40,50]

print(list(itertools.combinations(w,1)))
# [(30,), (40,), (50,)] → 1個の小さなコップの組合せすべて

print(list(itertools.combinations(w,2)))
# [(30, 40), (30, 50), (40, 50)] → 2個の小さなコップの組合せすべて

print(list(itertools.combinations(w,3)))
# [(30, 40, 50)] → 3個の小さなコップの組合せすべて

3.小さなコップの組合せたときの水の合計量は、sum関数を使用して求めます。

▼コード

########## 処理0(準備) モジュールインポート,インプット ###########

# 考え方2.
import itertools

N,K = map(int,input().split())

w = [0]*N
for i in range(N):
    w[i] = int(input())

# max_ml: 大きなコップに入れられる水の最大量を格納する変数
max_ml = 0

# max_ml: 小さなコップの組合せたときの、水の合計量
tmp_ml = 0

########## 処理1 小さなコップの組合せたときの水の合計量のうち、大きなコップの容量を超えない最大値を求める ###########

for i in range(N):
    # 考え方2.
    wc = list(itertools.combinations(w,i+1))
    
    for j in range(len(wc)):
        # 考え方3.
        tmp_ml = sum(wc[j])
        
        if tmp_ml <= K and max_ml < tmp_ml:
            max_ml = tmp_ml

print(max_ml)
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?