[Fishen]このcote-Greedyアルゴリズム,大数法則(実戦問題)
6905 ワード
グレースケールアルゴリズムギリシャ語の意味は「貪欲」です
つまり、現在の状況では、現在良いものだけを選ぶ方法は です.
✔[問題の説明]董斌の大数法則は、異なる数の配列がある場合、与えられた数をM回加算し、最大数を形成する法則である.ただし,配列の特定のインデックスの数はK回を連続して超えることはできない.
配列の大きさN,数値加算の回数M,Kが与えられると,結果が出力される. [入力条件]第1行N(2<=N<=1000)、M(1<=M<=10000)、K(1<=K<=10000)の自然数であり、自然数は をスペースで区切る. K <= M 第2行にはN個の自然数があり、スペース区切り(1<=自然数<=10000) ex)
5 8 3
2 4 5 4 6->46出力
[合成コード]
出力:46 forゲートまでは、自分で考えて書くことができますが、次のifゲートは本を参考にしています.ゼロになる例外をよく考えなければならない. [例の回答]上のコードはMが大きくなるとタイムアウトと判定されます の数列を利用して にアクセスする.665/66/6665、すなわち数列の長いは(K+1) である. Mを数列の長さで割ると、繰り返しの回数が得られます.ここでK値を乗じると出現回数が最も多い. 点が取れない場合を考慮し、残りの最大数を追加します. int(M/(k+1)) * k + M % (k+1) @これはPythonを使用した符号化テストです
つまり、現在の状況では、現在良いものだけを選ぶ方法は
✔[問題の説明]
配列の大きさN,数値加算の回数M,Kが与えられると,結果が出力される.
5 8 3
2 4 5 4 6->46出力
[合成コード]
n,m,k = map(int, input().split())
data = list(map(int,input().split()))
data.sort() #정렬
first = data[n-1]
second = data[n-2]
result = 0
while True:
for i in range(k):
if m == 0:
break
result += first
m -=
if m == 0:
break
result += second
m -= 1
print(result)
入力:583n 2 4 4 6出力:46
n,m,k = map(int, input().split())
data = list(map(int,input().split()))
data.sort() #정렬
first = data[n-1]
second = data[n-2]
#가장 큰 수가더해지는 횟수 계산
count = int(m/(k+1)) * k
count += m % (k+1)
result = 0
result += (count) * first
result += (m-count) * second
print(result)
📌Reference
この問題について([Fishen]このcote-Greedyアルゴリズム,大数法則(実戦問題)), 我々は、より多くの情報をここで見つけました https://velog.io/@jihyun2054/파이썬-이코테-그리디-알고리즘-큰-수의-법칙실전문제テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol